我正在尝试仅在单击某个提交按钮时更新嵌套属性,但我无法弄清楚如何仅将这些参数传递给更新操作。
def update
if params[:commit] == "Update Dogs"
owner.update_attributes(params[dogs_attributes: [:id, :name, :tag]])
render :show
...
end
end
def owner_attributes
params.fetch(:owner).permit(:id, :name, :address, dogs_attributes: [:id, :name, :tag])
end
它不会提交更改。我也试过了
owner.update_attributes(dogs_attributes)
然后我收到错误“undefined method dogs_attributes”。尝试将其定义为类似于owner_attributes的自己的方法,但是ActionController无法获取param:dog。我已经尝试了上面的一大堆变化无济于事。这可能是一个简单的错误,但我无法弄清楚如何正确地写这个。有什么想法吗?
PS。所有者确实接受狗的嵌套属性。
谢谢!
答案 0 :(得分:2)
为什么不为update方法指定不同的set属性?
def update
if params[:commit] == "Update Dogs"
Owner.update_attributes(update_attr)
else
Owner.update_attributes(owner_attr)
end
end
private
def update_attr
params.require(:owner).permit(:dog_attributes[:id, :name, :tag])
end
def owner_attributes
params.fetch(:owner).permit(:id, :name, :address, dogs_attributes: [:id, :name, :tag])
end
答案 1 :(得分:1)
添加:
accepts_nested_attributes_for :dogs
到您的Owner
型号