我正在开发关于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因任何原因未执行延迟加载。
有谁知道为什么会这样?
感谢目前为止的所有支持。
答案 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 /