Has_many和collection_singular_ids只有nil

时间:2011-12-16 18:58:37

标签: ruby-on-rails-3 activerecord

例如

a=User.new
a.accounts_ids
# SELECT `accounts`.id FROM `accounts` WHERE `accounts`.`user_id` IS NULL
# So I have array with all not associated accounts WHY???
a.accounts.empty?
# true
a.accounts_ids << 124
a.accounts_ids
# [124]
a.accounts.empty?
# false

那么为什么Rails如此奇怪呢?为什么我没有任何帐户时会有很多account_ids?

1 个答案:

答案 0 :(得分:0)

好的,当您执行Model.new时,而不是Model.create,结果对象(在您的示例中为a)具有所有nil值,包括它的id。 a.accounts_ids查找user_id等于a.id的帐户对象。因为那仍然是零,所以它寻找的是nil user_ids。 通常,解决方案是在弄乱它的关联之前保存模型(User,在你的情况下)。 所以:

a = User.new
a.save
a.accounts_ids 
=> []
a.accounts.empty? 
=> true

这对我来说似乎并不特别奇怪。至于一般问题'为什么Rails做X?',答案通常是'因为DHH和/或Rails核心团队认为它应该。'。 Rails是一个非常自以为是的框架。你按照自己的方式做事,或准备做任何其他方式的额外工作。 Convention over Configuration是游戏的名称。