【发布时间】:2014-05-06 11:00:45
【问题描述】:
更新嵌套属性追加而不是更新有许多关系 我正在尝试使用 Rails 4 Update_attributes
Class Person <ActiveRecord::Base
has_many :pets
accepts_nested_attributes_for :pets
end
Class Pet < ActiveRecord::Base
belongs_to :person
end
在我的控制器中,我收到的参数为 {id: 23, house_no:'22A', 宠物: [{name:'jeffy', type:'dog'}, {name:'sharky', type:'fish'}]}
我的更新方法是
def update
@Person = Person.find(params[:id])
if @Person.update(person_params)
@Person.save
render 'persons/create', status 200
else
render 'persons/create', status 400
end
end
private
def person_params
person_params = params.permit(:house_no)
person_params.merge! ({pets_attributes: params[:pets]}) if params[:pets].present?
person_params
end
现在当我更新它时 如果这个人已经有一只宠物 然后新的宠物被追加而不是被更新 例如,如果一个 id 为 1 的人有 1 只名为“Tiger”的宠物 我用 2 只名为“Shasha”和“Monti”的宠物更新那个人,然后这个人的记录有 3 只宠物(Tiger、Shasha 和 Monti),而不是更新为 2 只(Shasha 和 Monti)
【问题讨论】:
-
因为是has_many吧?
-
是的,它正确地更新了正常的字符串属性
-
@KushJain 您是否忘记在
Pet模型中添加belongs_to :person关联或它的错字 -
谢谢帕万,这是一个错字。我已经编辑了它
标签: ruby-on-rails ruby activerecord