这是params hash。
{"message_id"=>"#<Comment::ActiveRecord_Associations_CollectionProxy:0x007fbae5f12a78>",
"id"=>"1"}
我有一个类似消息的场景有很多评论。当我尝试编辑消息的纪念时,我收到错误
"Couldn't find Message with 'id'=#<Comment::ActiveRecord_Associations_CollectionProxy:0x007fbae5f12a78>"
我的编辑方法如下
def edit
@message = Message.find(params[:message_id])
# @message = Message.find(3)
@comment = @message.comments.find(params[:id])
end
答案 0 :(得分:0)
@message.comments
将返回您所找到的@message
的所有评论。
您需要使用您拥有的params[:id]
直接找到评论:
@comment = Comment.find(params[:id])
或者,您需要使用where
条件从关联查询中选择它:
@comment = @message.comments.where(id: params[:id])
考虑到你已经拥有特定的id
,我会选择第一个。在这里使用关联没有任何好处。
答案 1 :(得分:0)
问题在于您以某种方式将message_id
参数设置为<Comment::ActiveRecord_Associations_CollectionProxy:0x007fbae5f12a78>
要解决此问题,您必须确保message_id
是实际的整数:
{"message_id"=>"5", "id"=>"1"}
具体来说,为什么你甚至会收到这个错误?
看起来您正在使用nested routes
,这意味着您通常会通过传递具有相应ID的路由来访问资源:url.com/messages/1/comments/2
哦,我明白了。
您需要修复路径:
<%= link_to "Edit Comment", message_comments_path(message, comment) %>
您所完成的工作是@messages
,等于Message.all
或其他内容。您需要将单个message
记录传递到您的路径。