夹具会触发模型回调吗?

cak*_*rus 19 ruby ruby-on-rails fixtures

假设我在User.rb中有以下代码的User模型:

before_create :create_dependencies
after_create :build_inbox
Run Code Online (Sandbox Code Playgroud)

我还有一个users.yml文件,其中定义了一堆用户装置.

当我运行rake db:fixtures:load时,它似乎不会触发回调.

  1. 这是预期的工作方式吗?如果是这样,为什么他们这样设计呢?
  2. 有没有办法在加载灯具时强制触发回调?

rya*_*anb 26

这是预期的工作方式吗?如果是这样,为什么他们这样设计呢?

是的,灯具不使用回调.我假设这是出于性能原因.在不实例化模型的情况下,将数据直接加载到数据库中会更快.

有没有办法在加载灯具时强制触发回调?

从来没听说过.你有几个选择.一种是构建你的灯具,好像回调已经被触发了.也就是说,手动创建回调所需的数据.例如,如果您有一个哈希用户密码的回调,则需要手动哈希密码,然后将该哈希存储在夹具中.

第二个解决方案(强烈推荐!)是使用工厂.工厂会触发回调并允许您使用虚拟属性等.这是因为它们每次都会实例化模型.一个受欢迎的宝石是Factory Girl.另一个尝试的是机械师.我还创建了一个关于该主题的Railscasts剧集.