【发布时间】:2016-01-19 16:23:31
【问题描述】:
我有一个包含表用户和表黑名单的数据库
在我的用户模型中,我想在 legacy_logid 列的黑名单表中搜索用户 ID 是否存在。
所以我定义
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
它不是我想要查找的方法 - 它是一个属性,但似乎只能以不合逻辑的方式访问。
【问题讨论】:
-
无法解析常量
Blacklists。使用时尝试在前面加一个双冒号:::Blacklists。这将导致另一个错误,但说明自动加载不起作用。我最好的猜测是,当您改为编写Blacklist(单数)时,您的代码将起作用。 -
您是否在某处定义了
Blacklists? Rails 不是魔法。您不能只说出一个名称并假设 Rails 会知道它是您要对其执行查询的数据库表的名称。要了解 Rails 如何将类(模型)链接到数据库表,您应该阅读Active Record Basics Rails 指南。 -
当您执行
grep -R "Blacklists" ./app/models时会发生什么?如果什么都没出现,那么您还没有定义类/模块/常量Blacklists。知道 Rails 中的表是复数的,但它们必须由单数模型支持。 (User类/模型和users表。)
标签: ruby uninitialized-constant