当外键为零时,Rails自联接has_many返回所有未关联的记录

时间:2018-02-03 04:14:42

标签: ruby-on-rails ruby-on-rails-5

我在这里遇到一个有趣的问题,在用户模型上有反身关联。鉴于这种关系:

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。

由于

0 个答案:

没有答案