Унифицированная константа и ошибки имени

У меня есть база данных с таблицей 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
Другие вопросы по тегам