Ruby on rails 铁轨:_更改?“;关系的价值观

Ruby on rails 铁轨:_更改?“;关系的价值观,ruby-on-rails,ruby,controller,one-to-many,activemodel,Ruby On Rails,Ruby,Controller,One To Many,Activemodel,在我的项目中,我有User对象,它们有多个Order对象。 现在,在我的表单上,用户可以编辑其凭据,并可以停用助理订单: Orderform: - Firstname - Lastname - Email - Subform Orders: - Order1 - active - Order n - active 现在,对于订单上的任何属性,我都可以在使用user.first\u name\u changed?保存对象之前检测到更改。 但是,如果我想检测,如果订单上的活

在我的项目中,我有
User
对象,它们有多个
Order
对象。 现在,在我的表单上,用户可以编辑其凭据,并可以停用助理订单:

Orderform:
- Firstname
- Lastname
- Email
- Subform Orders:
  - Order1
    - active
  - Order n
    - active
现在,对于订单上的任何属性,我都可以在使用
user.first\u name\u changed?
保存对象之前检测到更改。 但是,如果我想检测,如果订单上的活动/非活动状态发生了变化(通过复选框完成),那么我无法执行
user.orders\u changed?
或任何类似操作

有没有一种简单的方法可以知道我的用户对象上的
到\u many
关系的属性何时更改

我在表单中更改某些内容时得到的
params
,如下所示:

{
    "firstname": "peter",
    "lastname": "peter",
    "orders_attributes": {
        "0": {
            "id": "1",
            "is_scheduled": "1"
        },
        "1": {
            "id": "2",
            "is_scheduled": "1"
        },
        "2": {
            "id": "3",
            "is_scheduled": "1"
        }
    },
}
更新:我当前执行以下操作,以检查给定
用户的产品是否已更改:

def check_for_changes(user, params)
  user.attributes = params
  product_changed = user.product_id_changed?

  # TODO: Check if any `is_scheduled` attributes changed on child-orders
  # <Insert magic here> 
end
检查
id
属性可以正常工作:

user.orders.any?(&:id_changed?)  # => false
这不会引发异常,但即使我更改了表单中的某些内容,也会返回false

user.orders.any?(&:changed?) # => false

如果表单是用常用的嵌套资源方法加载的,这是否有效

user.orders.any?(&:changed?)

基本上检查所有嵌套订单是否有任何更改。

使用您的方法,我总是得到一个
false
,即使我更改了影响
的复选框。在检查此项之前,是否必须向所有订单添加
order\u属性
?(请参阅我的更新答案,其中显示了我当前如何检查产品关系)。
user.orders.any?(&:changed?)