rails 4仅更新嵌套属性的强参数

时间:2013-09-09 07:34:33

标签: ruby-on-rails attributes nested-attributes strong-parameters

我正在尝试仅在单击某个提交按钮时更新嵌套属性,但我无法弄清楚如何仅将这些参数传递给更新操作。

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。所有者确实接受狗的嵌套属性。

谢谢!

2 个答案:

答案 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型号