如何在Rails 4中附加news_id来评论?

时间:2015-03-30 14:52:05

标签: ruby-on-rails

comments_controller.rb:

 def create
@comment = Comment.create(comment_params)
if @comment.save
  redirect_to :back
else
  redirect_to :back
  flash[:error] = @comment.errors.full_messages
end
end

news_controller.rb:

def show
  @news = News.find(params[:id])
  @comment =  @news.comments.new
end

comment.rb:

belongs_to :news, dependent: :destroy

news.rb:

has_many :comments

如果

,我如何将news_id附加到评论中
@news = News.find(params[:id])
@comment = @news.comments.create(comment_params)

根本不会工作,因为

CommentsController#create Couldn't find News with 'id'=

2 个答案:

答案 0 :(得分:1)

您确定comment_params正在发送您期望的内容吗?

它应该包含正确的news_id

确保使用用于创建评论的表单传递news对象的ID。这可以在hidden_field中完成(如果您还没有这样做)。假设你正在使用form_helpers,如果你有这个:

f.hidden_field :news_id

然后news_id应该正确地进入你的CommentController

你可以做一个

`raise "Boom: #{comment_params}"`

上面

@comment = Comment.create(comment_params)

确保它正在进入。只需提交评论,rails错误页面就会显示它正在获取的参数。

答案 1 :(得分:1)

你的路线是什么?您可以嵌套将使用表单本身传递news_id的资源:

resources :news do
  resources :comments
end

然后你可以这样做:

News.find(params[:news_id]).comments.create(comment_params)  

一个隐藏的领域不是我要去的方式,让我们为你做这件事。