Rails update_attributes 特定关联模型

Rails update_attributes for a specific associated model

我有以下设置:

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 相关联。

有没有办法让我们 update_attributes 在 post 上更新与 post 相关的特定评论?

可能是这样的:

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_for 更新。

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

任何帮助将不胜感激。

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

因此,如果 postcomments ID 为 4、5、6,您可以提交:

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

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

但是,如果您传递的 ID 不适用于属于该 post 的评论,则会抛出异常。