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

У меня есть приложение 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, о которой я не знаю. Я не могу найти информацию о том, как сделать роль динамической. Лучшее, что я смог найти, это это.

8
задан Community 23 May 2017 в 12:20
поделиться