无法找到带有'id'的消息=#<comment :: activerecord_associations_collectionproxy:0x007fbae5f12a78>

时间:2015-12-20 09:35:51

标签: ruby-on-rails ruby-on-rails-4

这是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

2 个答案:

答案 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记录传递到您的路径。