На самом деле в Rails 3.1 добавлены новые встроенные способы обработки массовых назначений с ролями, на которые, вероятно, стоит взглянуть.
Примечания к выпуску здесь
В основном это работает так:
class User < ActiveRecord::Base
attr_accessible :name
attr_accessible :name, :role, :as => :admin
end
Что это позволяет вам сделать, так это то, что вы можете использовать следующий способ, чтобы позволить пользователю обновлять свою собственную информацию в одном из ваших контроллеров:
@user.update_attributes(params[:user])
И это использование никогда не сможет обновить атрибут :role
в модели User. Но когда ваши администраторы управляют ролями в отдельном контроллере, вы можете использовать следующий синтаксис:
@user.update_attributes(params[:user], :as => :admin)
И это также позволит обновлять атрибут :role