在我的项目中,我有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
这不会引发异常,但即使我更改了
形式的内容,也会返回falseuser.orders.any?(&:changed?) # => false
答案 0 :(得分:0)
如果使用通常的嵌套资源方法加载表单,这是否有效?
user.orders.any?(&:changed?)
基本上检查所有嵌套订单是否有任何更改。