例如
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?
答案 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是游戏的名称。