Padrino + FactoryGirl不执行延迟加载

时间:2015-06-10 16:01:14

标签: ruby rspec factory-bot padrino

我正在开发关于Padrino的论文,使用Active Record作为ORM,使用FactoryGirl作为Mocking框架。

我面临一种奇怪的行为。

我有两种模式:用户和费率。

- User has a 'has_many :rates' association;
- Rate has a 'belongs_to :user' association;
- 'rates' table has an integer attribute named 'user_id' (not created with 'references' on migration, but directly with 'integer').

我的关联运行良好,但只能在对父对象执行重新加载后才能正常运行。

以下是与此问题相关的摘要: https://bitbucket.org/snippets/cuscos/MbdAK

如果我启动“Padrino控制台”并手动创建用户,则这是当前行为:

$ user = FactoryGirl.create(:user_with_rates)
$ user.rates.length          # Received '0', but expected '1'
$ user.rates.all.length     # Received '1', OK
$ user.reload!
$ user.rates.length          # Now I'm receiving '1' correctly

似乎ActiveRecord因任何原因未执行延迟加载。

有谁知道为什么会这样?

感谢目前为止的所有支持。

1 个答案:

答案 0 :(得分:0)

对于那些可能感兴趣的人,这是我采用的解决这个问题的解决方案:

在用户工厂中,改为:

after(:create) do |user, evaluator|
  create_list(:rate, evaluator.rates_count, user: user)
end

执行:

after(:create) do |user, evaluator|
  user.rates << create_list(:rate, evaluator.rates_count, user: user)
end

这不是一个合适的解决方案,但现在解决了我的问题。

干杯o /