Хобрук: Ваш путь к мастерству в программировании

Как правильно определить атрибуты пользователя в рельсах

Как добиться простой области видимости в ваших представлениях, таких как:

<% if @user.admin %>

где «admin» — это следующая область в user.rb:

scope :admin, where(role: "admin")

есть столбец Роль, который является строкой в ​​таблице пользователей

Я делал то же самое раньше с другой моделью (но не с пользовательской моделью разработки), к которой я мог бы позже обратиться

<% if objective.completed %>

сразу после вызова каждого метода в задачах.

Однако когда я делаю то же самое с пользовательской моделью, я получаю

undefined method `admin' for #<User:0x00000107e39038>

Как я мог заставить его работать? Я копался часами.

Для обходного пути без области попробуйте:

<% if @user.role == "admin" %>

Ответы:


1

Вы просто не можете использовать области таким образом. Области используются как методы класса, поэтому, если вы запустите

User.admin

он возвращает список пользователей, соответствующих заданному условию. Вам нужен метод экземпляра. Добавьте его в свой файл user.rb:

def admin?
  admin == 'admin'
end

и вы сможете использовать его в своем представлении:

- if @user.admin?

в любом случае, вам определенно следует пересмотреть вопрос о хранении ролей в виде строки в таблице users. Попробуйте создать другую таблицу с именем roles.

18.09.2013
  • Спасибо за понимание! Для тех, кто может столкнуться с этой проблемой, самый простой обходной путь: ‹% if user.role == admin %› 18.09.2013

  • 2

    Области обычно являются методами уровня класса, но как вы можете получить к ним доступ с помощью экземпляра. Я думаю, именно поэтому ошибка говорит о неопределенном методе.

    18.09.2013
    Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..