使用 Object.const_get().new 创建对象时未调用 rails before_create
rails before_create not called when creating an object with Object.const_get().new
我有一个 table 继承机制和一个基于文本类型创建对象的控制器方法。
来自我的控制器:
tile = Object.const_get(tile_data[:type]).new(params_from_tile(tile_data))
tile.save
在我的模型库中 class 我有几个 before create hooks:
before_create :set_handle, :upload
看来我的 none 个钩子正在触发,这与我使用 Object.const_get 创建对象有关吗?
编辑:我已经设法通过不使用 Object.const_get() 来解决这个问题。现在我只是直接调用我的 Tile.new,而且似乎没有任何负面影响反响,所以是的。
我已将其更改为直接调用基类:
Tile.new(params_from_tile(tile_data))
现在我的钩子按预期被调用,所以我不确定为什么会这样,希望知道的人能提供更好的答案,但答案似乎是使用 Object.const_get().new 来创建对象会跳过所有挂钩。附带说明一下,仅使用类型属性在基类上调用 create 仍会触发子类挂钩,这很好。
理论上,访问 class 的方式没有区别,两者的行为完全相同:
Tile.new(params_from_tile(tile_data))
和
Object.const_get("Tile").new(params_from_tile(tile_data))
你看到不良行为可能与其他一些小东西遗漏有关。
可能 tile_data[:type]
在您的示例中指向其他内容,您是否确保 Tile
记录在没有 callback
的情况下保存。你能试试 Object.const_get("Tile")
看看会发生什么吗?
我有一个 table 继承机制和一个基于文本类型创建对象的控制器方法。
来自我的控制器:
tile = Object.const_get(tile_data[:type]).new(params_from_tile(tile_data))
tile.save
在我的模型库中 class 我有几个 before create hooks:
before_create :set_handle, :upload
看来我的 none 个钩子正在触发,这与我使用 Object.const_get 创建对象有关吗?
编辑:我已经设法通过不使用 Object.const_get() 来解决这个问题。现在我只是直接调用我的 Tile.new,而且似乎没有任何负面影响反响,所以是的。
我已将其更改为直接调用基类:
Tile.new(params_from_tile(tile_data))
现在我的钩子按预期被调用,所以我不确定为什么会这样,希望知道的人能提供更好的答案,但答案似乎是使用 Object.const_get().new 来创建对象会跳过所有挂钩。附带说明一下,仅使用类型属性在基类上调用 create 仍会触发子类挂钩,这很好。
理论上,访问 class 的方式没有区别,两者的行为完全相同:
Tile.new(params_from_tile(tile_data))
和
Object.const_get("Tile").new(params_from_tile(tile_data))
你看到不良行为可能与其他一些小东西遗漏有关。
可能 tile_data[:type]
在您的示例中指向其他内容,您是否确保 Tile
记录在没有 callback
的情况下保存。你能试试 Object.const_get("Tile")
看看会发生什么吗?