Вы используете некоторую техническую терминологию в расплывчатой форме, что делает ваше понимание этого процесса запутанным, поэтому я собираюсь сначала прояснить эту терминологию.
где и как я могу назначитьuser to: роль администратора
Роль, используемая в параметре :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
, то (используя наш последний пример модели) она установит атрибуты на сарае для кошки, кроликаи лошадь.Но это только один из способов использования атрибутных ролей.Это зависит только от вас, если вы хотите использовать их по-другому.