Rails 4:具有不同角色的update_attributes

时间:2016-03-07 13:46:35

标签: ruby-on-rails ruby-on-rails-4 update-attributes

在rails 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)

在rails 4中不允许这样做。那么如何在rails 4中做类似的事情呢?

1 个答案:

答案 0 :(得分: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