单位化常量和名称错误

时间:2016-01-19 16:23:31

标签: ruby uninitialized-constant

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

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

所以我定义了

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

在我看来,这是一个非常简单的方法,要求检查表并查看userID是否在那里。 但没有......

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

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

1 个答案:

答案 0 :(得分:1)

首先,rails模型名称以单数形式写入,而表格为复数形式。

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

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

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

我认为您的模型之间的关系User有很多BlacklistBlacklist属于User

如果您定义下面的User类,则可以返回给定用户的所有黑名单:

class User < ActiveRecord::Base
  has_many :blacklists

  def blacklist_ip
    self.blacklists
  end
end