2

我有以下设置:

class Post < ApplicationRecord
  has_many :comments, inverse_of: :post, dependent: :destroy
  accepts_nested_attributes_for :comments
end

class Comment < ApplicationRecord
  belongs_to :post
end

如果我打电话post.update_attributes(post_params)

以下内容在哪里post_params

post_params = {
  "content"=>"Post something",
  "comments_attributes"=>{
    "0"=>{
      "content"=>"comment on something"
    }
  }
}

评论新评论被创建并与帖子相关联。

有没有办法让我们在帖子上更新属性并仍然更新与帖子相关的特定评论?

也许是这样的:

post_params = {
  "content"=>"Post something",
  "comments_attributes"=>{
    "0"=>{
      "id"=>"1", #if the id exist update that comment, if not then add a new comment.
      "content"=>"comment on something"
    }
  }
}

所以我可以打电话post.update_attributes(post_params)并利用accepts_nested_attributes_foron 更新。

如果这是不可能的,那么通过更新相关评论来更新帖子的最佳方法是什么?

任何帮助将不胜感激。

4

1 回答 1

3

只要您维护模型的正确模型 ID,您就可以更新提供的记录。

因此,如果post具有commentsID 4、5、6,您可以提交:

post.update(comments_attributes: [{id: 4, content: 'bob'}]

这将更新现有Comments.find(4)记录(前提是它成功验证)。

但是,如果您要传递的 ID 不适用于属于该帖子的评论,则会引发异常。

于 2017-02-23T01:21:31.260 回答