为什么在创建操作上触发before_update回调?

时间:2015-01-19 21:35:35

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有两个模型,一个Logo可以有很多订单。

Class Logo
  has_many :orders, inverse_of: :logo

Class Order
  belongs_to :logo, -> {includes :simulations}, autosave: true, inverse_of: :orders

徽标有before_update回调,据我所知,Rails只会在徽标实例#update上触发。问题是在Order#中创建我的回调被触发。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

创建Order时,流程如下:

  1. 初始化Order记录,设置适当的属性。
  2. Order记录保留在数据库中。
  3. autosave挂钩触发,在关联的相对记录上调用save,在这种情况下,Logo表示Order所属。
  4. 正在保存的相应Logo会导致before_update回调执行。
  5. 如果您不希望发生这种情况,可以将关联中的autosave: true移至:logo上的Order。但是,如果Logo的其他属性在创建Order时必须更改,则需要在Order中的其他代码/回调中考虑该属性。