Унифицированная константа и ошибки имени
У меня есть база данных с таблицей user и table blacklist
В моей модели пользователей я хочу найти, существует ли идентификатор пользователя в таблице черных списков в столбце legacy_logid.
Поэтому я определяю
def blacklist_ip
if Blacklists.legacy_logid == user.id
Blacklists.value
else
nil
end
end
Мне кажется, что это довольно простой способ попросить проверить таблицу и посмотреть, есть ли там идентификатор пользователя. Но нет..
uninitialized constant User::Blacklists
Так как мне получить доступ к записи в другой таблице в этой модели. Legacy_logid - это свойство таблицы - все, что я хочу сделать, это посмотреть его.
Если я попробую с:: Черными списками, я получу
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 ответ
Прежде всего, в рельсах названия моделей пишутся в единственном числе, а таблицы во множественном числе.
Поэтому убедитесь, что у вас есть стол users
и другой blacklists
так что вы можете получить к ним доступ через User
а также Blacklist
модели соответственно.
Вы можете найти, есть ли запись в blacklists
с данным идентификатором пользователя, выполнив:
def blacklist_ip
Blacklist.where(legacy_logid: self.id)
end
Я полагаю, что отношения между вашими моделями User
имеет много Blacklist
в то время как Blacklist
принадлежит User
,
Если вы определите свой User
класс, как показано ниже, вы сможете вернуть все ip черные списки данного пользователя:
class User < ActiveRecord::Base
has_many :blacklists
def blacklist_ip
self.blacklists
end
end