Rails 4 更新嵌套属性

2024-03-11

更新嵌套属性附加而不是更新有很多关系 我正在尝试使用 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, 房屋号码:'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)


你必须添加:id归因于:pets_attributes数组中person_params.

您需要允许 id 属性来更新记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4 更新嵌套属性 的相关文章

随机推荐

  • 为什么C# HttpClient无法调用这个URL(总是超时)?

    我一直在开发一个确定网页信息的应用程序 其中的组成部分之一涉及向 URL 发出 HTTP GET 请求 抓取 HTML 并对其进行分析 这对于我向它抛出的每个 URL 都运行良好 除了一个 罪魁祸首是 NETHttpClient请求问题域内
  • Cassandra一致性级别和IF NOT EXISTS子句问题

    卡桑德拉3 1 NodeJS 驱动程序 cassandra driver 3 0 0 键空间是使用以下语句创建的 如果不存在则创建键空间 xxxxxx WITH REPLICATION class SimpleStrategy replic
  • Android OBD-II 如何清除行驶距离(PID0131)?

    我正在开发一个应用程序 我需要计算从 A 点到 B 点 乘汽车 行驶的距离 I asked 榆树电子 http www elmelectronics com 芯片组制造商 他们表示没有标准的 OBD II PID 来从里程表返回里程 尽管汽
  • 无法将参数 1 从“const char [5]”转换为“LPCTSTR”

    我正在使用这个代码项目 http www codeproject com Articles 10138 Voice Recording Playing back using simple classes http www codeproje
  • 使用 NumberFormat 或 DecimalFormat

    在大多数情况下 我们如何证明合理性 何时使用 NumberFormat getInstance 我们什么时候使用 new DecimalForamt 如果要指定数字的格式 则必须使用 DecimalFormat 构造函数 如果您想要 大多数
  • 读取“文件”对象的内容?

    所以我有一个 文件 对象 通过处理从桌面拖放文件来检索 我可以使用ajax将文件发送到服务器 然后将它们返回给javascript来处理它们 但不做这一切就可以阅读它的内容吗 在这里 玩弄这个小提琴 http jsfiddle net jc
  • 查找接口实例背后的具体类型

    长话短说 我有一个 C 函数 它对作为对象实例传入的给定类型执行任务 当传入类实例时 一切正常 但是 当对象被声明为接口时 我真的很想找到具体的类并对该类类型执行操作 这是普遍存在的错误示例 例如不正确的属性大小写等 public inte
  • 如何在 GWT UIBinder 模板中重新设置 SplitLayoutPanel 拖动器的样式

    谁能告诉我如何更改 Split LayoutPanel 的 UIBinder 模板中匕首的样式 这是我的 MainMenu ui xml
  • 使用 geom_vline 在多个面的密度图中插入平均线

    对于下面的数据集 我想使用密度图来比较以下变量的两种性别的分布 withdraw affect 和 estress 这些图还应包含描述每个性别变量平均值的垂直线 并绘制在具有不同方面的同一图形上 我当前的代码如下 但是我不知道如何使用 ge
  • 更改存储库 URL 后 Capistrano 部署失败

    我通过 Git 存储库中的 capistrano 进行了简单的部署 起初 我从 GitHub 进行部署 一切正常 但后来我将存储库移至 BitBucket 现在我得到了 fatal Could not parse object 9cfb 一
  • 使用嵌入 API 谷歌分析设置 API 密钥

    我正在使用 embed api 用我的谷歌分析数据渲染地图 function w d s g js fs g w gapi w gapi g analytics q ready function f this q push f js d c
  • 如何在 Python 和 web3.py 中获取 Solidity 恢复/需要错误原因

    我正在努力抓住要求 交易恢复时出错 但我得到了交易的哈希值 我正在使用web3 py def addParticipants request web3 Web3 HTTPProvider settings Blockchain IP add
  • 使用有限的数据寻找多边形的中心

    我正在实施 Voronoi 曲面细分 然后进行平滑 为了平滑 我打算做劳埃德松弛 但我遇到了一个问题 我使用以下模块来计算 Voronoi 边 https bitbucket org mozman geoalg src 5bbd46fa22
  • NHibernate 异常:无法初始化集合,列名无效。流畅的映射。也许是多对一的问题?

    我对通过 NHibernate 遇到的异常感到困惑和沮丧 对于这篇文章的篇幅 我深表歉意 但我已尝试提供适当的详细信息来充分解释该问题 以获得一些帮助 事实如下 我有一个Person包含属性的类BillingManager 这也是一个Per
  • 是否有用于阻塞 boost::asio TCP 连接的 boost::iostreams (双向)设备?

    我正在调查可移植的 C 库 阻止对文件系统和网络的 I O 访问 它looks like boost filesystem boost iostreams and boost asio将由他们三人共同完成这项工作 需要明确的是 我目前对异步
  • 在 Winforms (C#) 中使用 MVP 模式的后台工作程序

    我一直在尝试使用 MVP 模式重构应用程序的意大利面条代码 但现在我正在为此苦苦挣扎 具有调用 DoWork 方法 后台工作者 的按钮的表单 这是一个很长的操作 我的问题是 如果我将长操作从视图移到演示器中 那么如何将此操作的进度更改发送到
  • 在线更新C#程序

    问候 如果这个问题已经被问过 我很抱歉 我尝试过使用搜索功能 但找不到适合我情况的答案 我有一个真正简单的 C 表单应用程序 只有 1 个文件 一个 exe 我目前通过 4shared 分发了此内容 人们可以随意下载 然而 每次我对程序进行
  • Matplotlib 颜色图 – 为每个图形/线条/主题选择不同的颜色

    我创建了一个读取并绘制 txt 文件及其内容 数字 值 的脚本 每个 txt 文件位于不同的文件夹中 每个文件夹又代表数据来源的一个主题 这段代码工作正常 Python 读取每个 txt 文件并将 23 个单独的图形 线条绘制成一个图 Py
  • jQuery 验证代码如何工作

    我发现这个教程使用 jQuery 和验证插件来验证表单输入 请参阅此处的工作示例 http jsfiddle net nK7Pw http jsfiddle net nK7Pw 这似乎工作正常 但是我有一个问题 在html部分中 没有提到错
  • Rails 4 更新嵌套属性

    更新嵌套属性附加而不是更新有很多关系 我正在尝试使用 Rails 4 Update attributes Class Person