未初始化的常量和名称错误

Unitialized constant and name errors

我有一个包含 table 用户和 table 黑名单的数据库

在我的用户模型中,我想搜索用户 ID 是否存在于 legacy_logid 列的黑名单 table 中。

所以我定义

def blacklist_ip
  if Blacklists.legacy_logid == user.id
    Blacklists.value
  else
    nil
  end
end

在我看来,这是一种非常简单的方法,可以要求检查 table 并查看用户 ID 是否在其中。 但是没有..

uninitialized constant User::Blacklists

那么我如何访问此模型中不同 table 中的记录。 legacy_logid 是 table 的 属性 - 我只想查找它。

如果我尝试使用 ::Blacklists,我会得到

uninitialized constant Blacklists

如果我尝试

def blacklist_ip
 if Blacklist.legacy_logid == user.id
Blacklist.value
 else
nil
 end
end

我明白了

Undefined method `legacy_logid' for #<Class:0x00000006407e40>

我将黑名单定义为

class Blacklist < ActiveRecord::Base

end

这不是我想要查找的方法 - 它是 属性 但这似乎只能以不合逻辑的方式访问。

首先在 rails 中模型名称是单数形式而 table 是复数形式。

因此请确保您有一个 table users 和另一个 blacklists 以便您可以分别通过 UserBlacklist 模型访问它们。

您可以通过执行以下操作来查找 blacklists 中是否有给定用户 ID 的记录:

def blacklist_ip
  Blacklist.where(legacy_logid: self.id)
end

我想你的模型之间的关系是 User 有很多 BlacklistBlacklist 属于 User.

如果您像下面这样定义 User class,您将能够 return 将给定用户的所有 ip 列入黑名单:

class User < ActiveRecord::Base
  has_many :blacklists

  def blacklist_ip
    self.blacklists
  end
end