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,就可以更新提供的记录。
因此,如果 post
有 comments
ID 为 4、5、6,您可以提交:
post.update(comments_attributes: [{id: 4, content: 'bob'}]
这将更新现有的 Comments.find(4)
记录(前提是它验证成功)。
但是,如果您传递的 ID 不适用于属于该 post 的评论,则会抛出异常。
我有以下设置:
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,就可以更新提供的记录。
因此,如果 post
有 comments
ID 为 4、5、6,您可以提交:
post.update(comments_attributes: [{id: 4, content: 'bob'}]
这将更新现有的 Comments.find(4)
记录(前提是它验证成功)。
但是,如果您传递的 ID 不适用于属于该 post 的评论,则会抛出异常。