Rails 4: атрибуты update_attributes с другой ролью
В рельсах 3 мы могли бы использовать update_attributes
как показано ниже
@customer.update_attributes(params[:customer], :as => :default)
or
@customer.update_attributes(params[:customer], :as => :admin)
и наши доступные атрибуты будут определены как
attr_accessible :fname, :lname, :as => [:default, :admin]
attr_accessible :status, :as => [:admin]
Но в rails 4 update_attributes не принимает второй параметр. Так как же мне преобразовать приведенный выше код для работы в rails 4?
Я пробовал что то подобное
@customer.update_attributes(customer_params)
private
def customer_params
params.require(:customer).permit(:fname, :lname, :status )
end
Но я не знаю, как передать роль в rails 4 при обновлении атрибутов. Я не могу сделать что-то подобное.
@customer.update_attributes(customer_params, :as => :admin)
Это не разрешено в рельсах 4. Так как я могу сделать подобное в рельсах 4?
1 ответ
Решение
Посмотрите на сильные параметры. Разрешенные атрибуты должны быть определены в контроллере, а не в модели
http://edgeguides.rubyonrails.org/action_controller_overview.html
Например, контроллер будет иметь
def customer_params
if current_user.admin?
params.require(:customer).permit(:fname, :lname, :status)
else
params.require(:customer).permit(:fname, :lname)
end
end
def update
@customer.update_attributes(customer_params)
...
end