-2

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

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

所以我定义

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

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

uninitialized constant User::Blacklists

那么如何在这个模型中访问不同表中的记录。legacy_logid 是表的属性 - 我要做的就是查找它。

如果我尝试使用 ::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

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

4

1 回答 1

1

首先,在 Rails 中,模型名称以单数形式编写,而表格则以复数形式编写。

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

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

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

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

如果您User像下面这样定义您的类,您将能够返回给定用户的所有 ip 黑名单:

class User < ActiveRecord::Base
  has_many :blacklists

  def blacklist_ip
    self.blacklists
  end
end
于 2016-01-19T16:49:14.933 回答