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'=
答案 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)
一个隐藏的领域不是我要去的方式,让我们为你做这件事。