1

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

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)

但后来我收到错误“未定义的方法 dogs_attributes”。尝试将其定义为类似于 owner_attributes 的自己的方法,但随后 ActionController 无法获取参数:dog。我在上面尝试了一大堆变体,但无济于事。这可能是一个简单的错误,但我不知道如何正确编写它。有任何想法吗?

PS。所有者确实接受狗的嵌套属性。

谢谢!

4

2 回答 2

2

为什么不为更新方法指定不同的设置属性?

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
于 2013-09-09T20:52:52.363 回答
1

Add:

accepts_nested_attributes_for :dogs

to your Owner model

于 2013-09-09T08:11:10.547 回答