1

У меня есть следующие настройки: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) запись (при условии, что подтверждает успешно).

Но если вы должны были передать идентификатор, который не применим к комментариям, принадлежащим этому сообщению, будет выбрано исключение.

+0

Спасибо! Похоже, что в моем вопросе было что-то, что я написал. Когда я попробовал что-то подобное, это не сработало. Но оказалось, что я не установил идентификатор в своих Сильных Парамах. Еще раз спасибо. :-) – user2517182