在我的项目中,我有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