我有以下型号,但我无法在创建时设置comment.post_id。
Post.rb
has_many :comments
和
Comment.rb
belongs_to :post
新评论的表单位于展后页面。 因此帖子#show应该以:
结束@comment = comment.new
@comment.post_id = params[:id]
和posts / show.html.erb应该包含:
<%= render 'comments/form' %>
但是,该表单会引发Post can't be blank
错误。
我试过的第二件事是没有用的,是:
帖子页面链接到新评论的页面,并将post_id存储在URL中。
config / routes.rb包括:
get 'posts/:id/comment', to: 'comments#new', as: 'new_comment'
链接的格式如下:
<%= link_to "New comment", new_comment_path(@post) %>
评论#new包含
@review = Review.new
@review.player_id = params[:id]
这也不起作用,表单返回Post can't be blank
。
与B相同,但post_id存储在cookie中,如此... 帖子#show includes:
@comment = Comment.new
session[:post_id] = params[:id]
posts / show.html.erb包含以下链接:
<%= link_to "new comment", new_comment_path %>
和评论#new是:
@review = Review.new
@review.player_id = session[:player_id]
session.delete(:player_id)
我原本以为问题是comment_params方法,但看起来很好:
params.require(:comment).permit(:body, :post_id)
那么如何分配comment.post_id?
答案 0 :(得分:1)
因为comment belongs_to :post
,你需要处理Post,而不是post_id。所以:
@post = Post.find(params[:post_id])
@comment = @post.comments.new
etc
根据您发布的内容,我不清楚该帖子的ID是params[:id]
还是params[:post_id]
,但我认为您明白了这一点。< / p>
答案 1 :(得分:0)
问题是,在提交表单后,表单只会发回它所拥有的任何字段。因此,即使分配了post_id,注释#create action也不会收到值。
解决方案是在表单中创建一个隐藏字段,如下所示:
<%= form.text_field :post_id, :hidden => true %>