2016-03-07 4 views
0

В рельсах 3 мы могли бы использовать update_attributes нижеRails 4: 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] 

Но в рельсах 4, update_attributes не принимает второй параметр. Итак, как я могу преобразовать приведенный выше код в работу в rails 4?

Я пытался что-то вроде этого

@customer.update_attributes(customer_params) 

private 
    def customer_params 
    params.require(:customer).permit(:fname, :lname, :status) 
    end 

Но я не знаю, как передать роль в рельсах 4 при обновлении атрибутов. Я не могу сделать что-то подобное.

@customer.update_attributes(customer_params, :as => :admin) 

Это не разрешено в рельсах 4. Так как же я могу сделать подобное в рельсах 4?

ответ

0

Посмотрите на сильные параметры. Допустимые атрибуты должны быть определены в контроллере не модели

http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters

Например, контроллер будет иметь

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 
Смежные вопросы