【问题标题】:rails 4 update only nested attributes strong parametersrails 4 仅更新嵌套属性强参数
【发布时间】:2013-09-09 07:34:33
【问题描述】:

我试图在单击某个提交按钮时仅更新嵌套属性,但我不知道如何仅将这些参数传递给更新操作。

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

谢谢!

【问题讨论】:

  • owner.update_attributes(owner_attributes) ?
  • owner.update_attributes(params[dogs_attributes: [:id, :name, :tag]]) 是什么? ..它应该类似于 owner.update_attributes(owner_attributes)
  • 但我只想为主人更新狗的属性,表格中还有一些我不想更改的东西

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


【解决方案1】:

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

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

【讨论】:

  • 嘿,谢谢,关于如何分离属性的好电话。但是我仍然遇到更新仍然会影响所有者的虚拟属性的问题。任何想法如何确保它们不会影响虚拟属性?
  • 我已经修改了更新方法,你觉得有用吗?
  • na,我已经这样做了。我认为这实际上可能是保护虚拟属性的更多问题,因为这不起作用。我想我需要更新或提出一个新问题。你的回答是正确的,所以谢谢!
【解决方案2】:

添加:

accepts_nested_attributes_for :dogs

到您的Owner 模型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多