0

At first, when I was creating posts, the user id was nil. Originally my post_params were just :content & :category. It wasn't until I added :user_id that I was finally able to get post.user.first_name to work properly.(first_name is a User column) I screwed around a lot with it and at one point when I was creating posts, the id would show up, but then on a refresh of the page, the id would disappear(I am using ajax to show the post after submit). The params still do not include :user_id, but now when the post is created and put into the db, the user_id is there. I am not explicitly saying what the user_id is, so how does it know? from the before_authentication! filter from devise? Or does it get the id from current_user.posts.create?

Originally had

def  create  
@post=post.create({content: post_params[:content], category:   post_params[:category].downcase})
end

then...

def create
@post = current_user.posts.create({content: post_params[:content], category:   post_params[:category].downcase})
end

private

def post_params
params.require(:post).permit(:content, :category, :user_id)
end


User Load (0.2ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 6  ORDER BY  "users"."id" ASC LIMIT 1
 (0.1ms)  begin transaction
SQL (0.3ms)  INSERT INTO "posts" ("category", "content", "created_at", "updated_at",   "user_id") VALUES (?, ?, ?, ?, ?)  [["category", "announcements"], ["content", "Hi All!"],  ["created_at", "2014-10-13 19:58:02.937604"], ["updated_at", "2014-10-13 19:58:02.937604"],  ["user_id", 6]]
(3.8ms)  commit transaction
Like Exists (0.2ms)  SELECT  1 AS one FROM "likes"  WHERE "likes"."user_id" = 6 AND   "likes"."post_id" = 69 LIMIT 1
1
  • You need to study a little. post_params is a set of permitted parameters and is used as such. current_user.posts.create(post_params)... This will limit the parameters submitted to the DB Engines to the ones defined in def post_params and those alone...
    – Ruby Racer
    Commented Oct 13, 2014 at 21:22

1 Answer 1

0

while you call create or build on a relationship (posts of user in this case) Rails automatically instanciate the good relationship field to link the object to the parent.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.