Не совсем уверен, что именно вы пытаетесь сделать или какова цель этого mass_assignment_authorizer. Похоже, есть более простые способы защиты от массовых назначений. При этом я прочитал последние пара абзацев Railscast , и кажется, что, получив этот инициализатор, вы не можете передавать аргументы в инициализатор при создании объекта. Даже если бы ты мог, он не установил бы атрибуты ...
В контроллере нам также нужно применить доступную опцию к действию создания. Если мы просто применим его так, это не сработает.
@article = Article.new(params[:article])
@article.accessible = :all if admin?
Причина, по которой это не работает, заключается в том, что массовое назначение происходит при новом вызове, поэтому к тому времени, когда мы установили доступ, уже слишком поздно. Нам нужно отделить создание новой статьи от присвоения ее атрибутов и перебросить вызов между ними.
Мне кажется, что для того, чтобы установить атрибуты для одной из ваших моделей, вам нужно сначала создать ее, а затем установить для класса значение 1014 *, а затем вручную назначить нужные атрибуты, например, :
u = User.create
u.accessible = :all if current_user.is_admin? # or whatever the conditional is for the admin user
u.update_attributes(:username => "johnsmith", :email => "johnsmith@gmail.com", :password => "changethis")
В зависимости от того, сколько атрибутов вам нужно иметь доступными в зависимости от разрешений, вам может быть лучше пропустить этот модуль, так как для его реализации требуется немного больше работы. Если в одной или двух моделях всего несколько атрибутов, вам лучше всего реализовать эту функцию вручную с помощью собственных методов и attr_accessible. Попробуйте прочитать эту статью о методах доступа ruby , чтобы узнать, сможете ли вы получить желаемый результат без этого плагина?