I've been playing with the models for a bit.
I am using devise
My schema:
create_table "complaints", force: :cascade do |t|
t.string "title"
t.text "complaint_info"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
end
add_index "complaints", ["user_id"], name: "index_complaints_on_user_id", using: :btree
create_table "users", force: :cascade do |t|
...
end
Complaint model:
class Complaint < ActiveRecord::Base
belongs_to :user
validates :title, presence: true
end
Users model:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :complaints
end
I was assuming this was the setup for rails to assume the current_user id goes inside the user_id but it's not storing it, I have to do it manually in the controller like this:
def create
@complaint = Complaint.new(complaint_params) do |c|
c.user_id = current_user.id
end
if @complaint.save
redirect_to dashboard_complaint_path(@complaint)
else
render 'new'
end
end
private
def complaint_params
params.require(:complaint).permit(:title, :complaint_info)
end
Is this the right way to do it? thanks.