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
Другие вопросы по тегам