Ответ 1
Вы используете некоторую техническую терминологию неопределенными способами, из-за чего ваше понимание этого процесса запутывается, поэтому я сначала проясню эту терминологию.
где и как я могу назначить пользователю: роль администратора
"Роль", используемая в параметре :as
для attr_accessible
, не является ролью пользователя. Это роль атрибута. Это означает, что атрибут защищен от перезаписи, если эта роль не указана в инструкции, которая устанавливает атрибут. Таким образом, эта система не зависит от какой-либо пользовательской системы. Вашему приложению даже не нужно, чтобы пользователи имели роли в массовом назначении.
Могу ли я определить свою собственную роль, например group_to_update
Роли на самом деле не "определены" в каком-либо формальном смысле. В любом месте, где ожидается роль, просто используйте в качестве роли любой символ/строку (например, :group_to_update
). Не нужно указывать его где-либо еще раньше.
Вот как это работает. Обычно при массовом назначении хэша для моделирования атрибутов все атрибуты модели используются как ключи к присвоенному хешу. Поэтому, если у вас есть экземпляр Barn
и Barn
его, с тремя атрибутами horse
, cat
и rabbit
, тогда это:
barn.attributes = params
По сути, это то же самое, что и делать:
barn.horse = params[:horse]
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
Теперь, если вы установите любой attr_accessible
в модели сарая, только те атрибуты, которые вы там установили, будут обновлены при использовании массового назначения. Пример:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit
end
Затем это:
barn.attributes = params
Будет делать только это:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
Потому что только "кошка" и "кролик" доступны для доступа ( "лошадь" - нет). Теперь рассмотрим установку роли атрибута следующим образом:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit, :as => :banana
end
Во-первых, обратите внимание, что роль может быть любым, что угодно, если это символ/строка. В этом случае я сделал роль :banana
. Теперь, когда вы устанавливаете роль в атрибуте attr_accessible
, он обычно не присваивается. Это:
barn.attributes = params
Теперь будет делать следующее:
barn.cat = params[:cat]
Но вы можете назначать атрибуты с использованием определенной роли с помощью метода assign_attributes
. Итак, вы можете сделать:
barn.assign_attributes(params, :as => :banana)
Это назначит все нормально защищенные параметры, а также все параметры, защищенные в роли :banana
:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
Итак, рассмотрим более длинный пример с большим количеством атрибутов:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit, :as => :banana
attr_accessible :horse, :as => :banana
attr_accessible :cow, :as => :happiness
end
Затем вы можете использовать эти роли при назначении атрибутов. Это:
barn.assign_attributes(params, :as => :banana)
Соответствует:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
barn.horse = params[:horse]
И это:
barn.assign_attributes(params, :as => :happiness)
Соответствует:
barn.cat = params[:cat]
barn.cow = params[:cow]
Теперь, если вы решите, вы можете сделать роли пользователя (например, столбец "роль" в вашей модели пользователя) соответствовать ролям атрибутов в любой модели. Таким образом, вы можете сделать что-то вроде этого:
barn.assign_attributes(params, :as => user.role)
Если эта роль user
оказывается banana
, то (используя наш последний пример модели) она установит атрибуты на сарай для кошки, кролика и лошади. Но это всего лишь один способ использования ролей атрибутов. Это зависит только от вас, если вы хотите использовать их по-другому.