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?)