Rails 3.2, массовое назначение, динамические роли?

У меня есть приложение Rails с пользовательской моделью, которая содержит атрибут admin. Он заблокирован с помощью attr_accessible. Моя модель выглядит так:

attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin

А вот как выглядит мой метод обновления в моем пользовательском контроллере:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
    flash[:notice] = "Profile updated"
    redirect_to edit_user_url(@user)
  else
    render 'edit'
  end
end

У меня есть вспомогательный метод в моем контроллере приложений, который возвращает роль в виде строки:

def current_user_role
  @current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role

Я также установил config.active_record.whitelist_attributes = true в config/application.rb.

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

У меня есть ощущение, что есть проблема, специфичная для Ruby или Rails, о которой я не знаю. Я не могу найти информацию о том, как сделать роль динамической. Лучшее, что я смог найти, это это.


person jeffmueller    schedule 15.03.2012    source источник
comment
Если я вас правильно понял, вы сами ответили на свой вопрос. Если это так, вы должны опубликовать свой ответ как ответ (а не редактирование вашего вопроса) и принять его.   -  person David J.    schedule 21.06.2012


Ответы (2)


В моей модели был ошибочный атрибут attr_accessor :admin, оставшийся после предыдущей попытки заставить это работать. Я проглядел это. Удаление его исправило.

Итак, в результате это довольно простой способ заставить динамические роли работать в Rails 3.2.

person jeffmueller    schedule 23.07.2012

Похоже, это может быть ошибка в Rails 3.2.

https://github.com/stffn/declarative_authorization/issues/127

person Eric Sites    schedule 15.03.2012