Rails 3 has_many 改变了?

2024-01-05

我需要跟踪像这样设置的关联的更改(添加和删除):

has_many :listing_services
has_many :services, through: :listing_services

对于普通属性,最简单的方法是检查l.changes[attribute] in before_save or l.previous_changes[attribute] in after_save.

问题是,最好的方法是什么has_many属性?


我没用过changes方法。但我相信你总能使用魔法<attribute_name>_changed? and <attribute_name>_was:

services.any? {|s| s.attribute_name_changed?}
services.map(&:attribute_name_was)

请参阅瑞安·贝茨 (Ryan Bates) 铁路广播了解更多信息:第109章 第109章 http://railscasts.com/episodes/109-tracking-attribute-changes

UPDATE: 可以通过:after_delete, and :after_add回调到has_many直接关联:

has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2

请小心使用这些回调并注意它们的工作原理。他们 被召唤items.build and items.create once。所以如果你打电话items.build然后保存父对象(带有嵌套属性 例子)after_add打回来只会在构建时调用一次 关联对象。这意味着如果父级有验证则构建items不会保存在数据库中,您不能依赖after_add打回来。换句话说,它并没有说添加的关联的记录已保存在数据库中。因此您可以保证仅在调用时添加和保存项目items.create。我希望你能理解这个澄清。

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

Rails 3 has_many 改变了? 的相关文章

随机推荐

  • 这些 Mono/xbuild 警告是什么意思以及如何修复它们?

    我使用 Mono 的 xbuild 2 10 5 0 构建 VS2010 项目 这些项目使用 NET Framework 3 5 Client Profile 作为目标框架 它们必须与 3 5 兼容 并且我只需要客户端配置文件部分 我收到以
  • inline-block 的替代方案及其对当前浏览器的支持

    所以我目前正在使用inline block对于我的网站 据我所知 它仍然相对较新 5 年范围 我想知道现在是否可以使用它 或者是否有人可以向我推荐一个优雅的黑客 那就太棒了 谢谢你的时间 你实际上可以使inline block跨浏览器 你一
  • 无法读取 Freemarker 模板中的对象值

    我无法读取 Freemarker Templatet 中的 scala java 对象值 我尝试过这个 case class ScheduleEmail workOrderNo String name String woType Strin
  • Angular 路由如何优先于静态站点上的文件路径

    如果我使用文件结构构建静态站点 index html blog index html 我在里面放了一个带有路由的 Angular 应用程序blog index html 然后转到路线example com blog page 2 它会转到
  • 如果在某种横向或纵向模式下,如何提示用户旋转设备,类似于 GameInformer App

    我有一个以横向模式观看效果最佳的网站 我怎样才能拥有它 如果用户以横向模式加载网站 那就没问题 但如果以纵向模式加载 或者他们从横向模式旋转到纵向模式 则会弹出图像或其他内容 占据整个屏幕 要求他们旋转回景观 认为 Javascript j
  • ASP.NET MVC 富文本编辑器 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Goal 此 wiki 条目的目标是为传统网站创建可用的富文本编辑器的综合列表 我们所说的传统是指任何非 ASP NET 的服务器控件和视图状态 开源
  • Arduino 以太网扩展板未连接到 Web 服务器

    我在让 Arduino 以太网扩展板与服务器通信时遇到问题 串行监视器上的结果始终是 我的arduino代码是 include
  • 如何在不依赖 moment.js 的情况下格式化 Angular Material 日期选择器

    我想实现什么目标 我希望我的 Angular Material v11 日期选择器在 Angular 版本 11 项目中使用 DD MM YYYY 格式 我尝试了什么 我尝试使用MatMomentDateModule但这使用了 moment
  • 使用 pandas 进行分组和比较

    我的数据看起来像 Identifier Category1 Category2 Category3 Category4 Category5 1000 foo bat 678 a x ld 1000 foo bat 78 l o op 100
  • 使用 javascript 只允许文本框中包含字母

    我想使用 JavaScript 在文本框中只允许使用字母 我使用了代码 var nam f nm value if isNaN nam region innerHTML alphabets only 它不起作用并且也允许数字 我怎样才能解决
  • 安排从 WiX 延迟自定义操作重新启动

    我有一个 WiX 延迟自定义操作 可以有条件地修改某些注册表项 为了使更改生效 需要重新启动 我希望用户获得标准对话框 提示他们在安装完成后重新启动 如何安排从延迟的自定义操作重新启动 为什么你有一个自定义操作来执行 MSI WiX 本身知
  • IntelliJ 在 JavaFX JAR 文件中包含外部 JAR

    如何将 lib 下的所有 jar 文件包含在生成的主 jar 文件中 IntelliJ 是否旨在创建 JAR 文件 因为我似乎无法让它发挥作用 以下是我的设置中的一些屏幕 结果 有人可以向我解释为什么另一个 JAR 文件是在我的主 JAR
  • 如何为 JavaScript 和 JSON 正确编码 UTF-8?

    我在创建输入验证哈希时遇到问题 JavaScript 将数据提交给 API API 使用 json encode 验证发送的数据 基本上它的工作原理是这样的 input array name John Doe city gt New Yor
  • 使用 .gitignore 取消忽略子目录中的特定文件

    我无法让 gitignore 执行我想要的操作 我的文件夹结构如下所示 assets img thousands of folders KEEP SOMETHING IN THIS FOLDER another thousands of f
  • android 从接收到的字符串进行UTF8编码

    我收到一个未正确编码的字符串 例如mystring 201 其中必须是mystring 1 如何替换所有可以解释为 UTF8 的字符 我读了很多帖子 但没有完整的解决方案 请注意 字符串已经编码错误 我不是问如何编码字符序列 几天前我在 i
  • 如何设置 Http 标头来检索 json 对象

    我正在尝试创建一个 httpGet 返回类似的请求 http www myserver com do json json http www myserver com do json json 杂志 1 不过我似乎无法正确理解标题 我试过 u
  • 将向量输出转换为 data.table 中的列?

    我通过将函数应用于 data table 的某些子集来生成输出 我正在使用这样的函数 data foo args by list Year Month 我的功能foo始终返回长度向量n 我得到这样的输出 Year Month V1 1 19
  • 如何解决移动设备(ios)上的双击:悬停问题?

    我有一个图像链接 其中包含 hover具有在鼠标悬停时在图像顶部显示文本的功能 然后单击即可进入新网页 然而 在移动设备上 仅在 Safari 移动设备上进行过测试 轻按一下即可显示悬停功能 然后轻按一下即可进入该页面 我不想要这个 我可以
  • 使用极小极大搜索进行信息不完善的纸牌游戏

    我想使用极小极大搜索 带有 alpha beta 修剪 或者更确切地说负极大搜索 让计算机程序玩纸牌游戏 纸牌游戏实际上由 4 名玩家组成 因此 为了能够使用极小极大等 我将游戏简化为 我 对抗 其他人 每次 移动 之后 你都可以从游戏本身
  • Rails 3 has_many 改变了?

    我需要跟踪像这样设置的关联的更改 添加和删除 has many listing services has many services through listing services 对于普通属性 最简单的方法是检查l changes at