Rails update_attributes для конкретной ассоциированной модели
У меня есть следующие настройки:
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"
}
}
}
Комментарий Новый комментарий создается и связывается с постом.
Есть ли способ обновить update_attributes к сообщению и при этом обновить конкретный комментарий, связанный с сообщением?
Может быть что-то вроде:
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
на обновлениях.
Если это невозможно, каков наилучший способ обновления сообщения с обновлением соответствующего комментария?
Любая помощь будет принята с благодарностью.
1 ответ
Вы можете обновить предоставленные записи, если вы поддерживаете правильный идентификатор модели для модели.
Так что если post
имеет comments
с идентификаторами 4,5,6 вы можете отправить:
post.update(comments_attributes: [{id: 4, content: 'bob'}]
И это обновит существующие Comments.find(4)
запись (при условии, что она успешно проходит проверку).
Но если вы передадите идентификационный номер, который не применяется к комментариям, относящимся к этому сообщению, будет выдано исключение.