Идентификатор поста будет на самом деле в URL. Если вы введете rake routes
в свой терминал / консоль, вы увидите, что шаблон для вашего вложенного ресурса определен так:
POST /posts/:post_id/comments {:controller=>"comments", :action=>"create"}
Взгляните на HTML-код, выделенный методом form_for
, и обратите особое внимание на action
URL-адрес тега <form>
. Вы должны увидеть что-то вроде action="/posts/4/comments"
.
Предполагая, что вы определили resources :comments
только один раз в своем routes.rb
как вложенный ресурс resources :posts
, тогда вы можете безопасно изменять действие CommentsController#create
как таковое :
# retrieve the post for this comment
post = Post.find(params[:post_id])
comment = Comment.new(params[:comment])
comment.post = post
Или вы можете просто передать params[:post_id]
в comment
экземпляр следующим образом:
comment.post_id = params[:post_id]
Надеюсь, это поможет.
Для получения дополнительной информации о вложенных формах / моделях, я рекомендую посмотреть следующие Railscasts: