неопределенный метод `admin? 'при попытке добавить пользователя с правами администратора - PullRequest
2 голосов
/ 31 марта 2012

У меня есть приложение Rails 3.2.2, использующее Ruby версии 1.9.2.Я создал базовую аутентификацию для своих пользователей, следуя учебнику по Railscasts.

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

На данный момент у меня есть учетные записи пользователей, и я могу проверить, вошел ли пользователь, используя

<% if current_user %>

Поэтому я хотел бы иметь возможность сделать

<% if current_user.admin? %>

Если я использую вышеупомянутую admin? проверку, я получаю следующую ошибку:

undefined method `admin?'

Насколько я понимаю, вышеприведенные проверкиАдминистратор верен для текущего пользователя.Я добавил в свою пользовательскую таблицу столбец admin, который имеет логическое значение и установил значение по умолчанию = false.

create_table :users do |t|
  t.string :name
  t.string :initials
  t.string :email
  t.string :password_digest
  t.boolean :admin, :default => false

Я также добавил столбец admin в мой начальный файл, чтобы иметь тестовую учетную запись администратора

User.create(name: 'Danny', initials: 'DAN', email: 'danny@railsapplication.co.uk', password: 'secret', admin: 'true')

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

Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Если вы попытались добавить столбец admin в таблицу, отредактировав исходную миграцию, вам нужно будет запустить rake db:rollback, чтобы удалить таблицу users, а затем rake db:migrate, чтобы вывести таблицу обратно с колонкой admin на месте.

Вы не можете редактировать миграции таким образом и ожидать, что результаты появятся в базе данных автоматически. Если вы хотите добавить столбцы в таблицу, вам нужно сгенерировать вторую миграцию:

$ rails g migration AddAdminToUsers

А затем используйте помощник add_column:

class AddAdminToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, :default => false
  end
end
0 голосов
/ 31 марта 2012

Редактировать: Моя ошибка, ActiveRecord, очевидно, должен обеспечить это. Запустили ли вы миграцию для обновления схемы?

Вам нужно определить метод admin? самостоятельно. Я не думаю, что ActiveRecord автоматически предоставляет метод стиля предиката для логических атрибутов (хотя, может быть, существует гем, который делает это?)

В вашей пользовательской модели просто добавьте:

def admin?
  admin
end

Или просто используйте current_user.admin, что должно сделать то же самое. Хотя мне нравится внешний вид предиката.

...