我在这里遇到一个有趣的问题,在用户模型上有反身关联。鉴于这种关系:
class User < ActiveRecord::Base
has_many :rewards_referrals, class_name: 'User', foreign_key: :rewards_referred_by_token, inverse_of: :rewards_referrer, primary_key: :rewards_token, counter_cache: :rewards_referrals_count
belongs_to :rewards_referrer, class_name: 'User', foreign_key: :rewards_referred_by_token, inverse_of: :rewards_referrals, primary_key: :rewards_token, counter_cache: :rewards_referrals_count, optional: true
end
如果我的用户u
rewards_token
nil
并且我致电u.rewards_referrals
,我会收到rewards_referred_by_token
{{1}的所有用户}},而预期nil
。
另一个例子,我有一个这种关联的计数器缓存。即使在重置计数后,nil nil
的用户rewards_token
也会等同于rewards_referrals_count
用户数。
基本上,似乎Rails正在考虑将User.where(rewards_referred_by_token: nil).count
作为此关系的有效外键,而不是将其解释为没有关系。这是一个错误吗?知道如何解决这个问题吗?
nil
, u.rewards_referrals
应返回nil
u.rewards_token == nil
按预期返回nil。
由于