ber*_*kes 22 activerecord ruby-on-rails
将记录添加到has_many关联并保存父级时,该父级updated_at不会被碰撞:
order = Order.new
order.save
pp order
=> #<Order id: 3, created_at: "2013-04-18 15:25:09", updated_at: "2013-04-18 15:25:09">
order.line_items << LineItem.new()
pp order.line_items
=> [#<LineItem id: 4, order_id: 3, created_at: "2013-04-18 15:26:16", updated_at: "2013-04-18 15:26:29", product_id: 123>]
order.save
pp order.reload
=> #<Order id: 3, created_at: "2013-04-18 15:25:09", updated_at: "2013-04-18 15:25:09">
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为Order它没有触及; 外键生活在LineItem.
但是,在这种情况下,我想查询Order并查找在过去30分钟内Order收到新LineItems的s(即:在过去30分钟内"更新").
我不确定这里最好做什么,以及如何轻松实现这一目标.是否有一些我可以设置的标志或方法让AR更新父母updated_at如上所述?或者我应该通过一些钩子来做到这一点?如果是这样,什么挂钩?或者我应该将此时间戳存储在不同的列中?
请注意,我可以查询line_items.updated_at槽a join(:line_items),但这可能会使我的代码更混乱,性能更差:或者这是Rails中此类问题的首选方式?
ben*_*mer 37
您需要包括touch: true连同belongs_to :order关联.
class Order < ActiveRecord::Base
has_many :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :order, touch: true
end
Run Code Online (Sandbox Code Playgroud)
这将更新updated_at关联订单的列.这里有更多的文档
| 归档时间: |
|
| 查看次数: |
6082 次 |
| 最近记录: |