0

在我的项目中,我有User具有多个对象的Order对象。现在在我的表单上,用户可以编辑他的凭据并可以停用分配订单:

Orderform:
- Firstname
- Lastname
- Email
- Subform Orders:
  - Order1
    - active
  - Order n
    - active

现在,对于订单上的任何属性,我都可以在使用保存对象之前检测到更改user.first_name_changed?。但是,如果我想检测,如果订单上的活动/非活动状态发生了变化(用复选框完成),那么我不能做user.orders_changed?任何事情。

有没有一种简单的方法可以知道to_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"
        }
    },
}

更新:我目前执行以下操作来检查给定的产品是否已user更改:

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

更新 2

我尝试了 DGM 的方法,但奇怪的是我无法检查is_scheduled_changed?我的订单对象:

这失败了,我不确定为什么该属性is_scheduled没有is_scheduled_changed?等效项:

user.orders.any?(&:is_scheduled_changed?)
!! #<NoMethodError: undefined method `is_scheduled_changed?' for #<Order:0x007fd5927ae620>>

检查id属性无一例外:

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

这不会引发异常,但即使我更改表单中的某些内容,也始终返回 false

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

1 回答 1

0

如果表单加载了通常的嵌套资源方法,这有效吗?

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

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

于 2013-10-27T22:33:42.843 回答