Rails 4: update_attributes 角色不同
Rails 4: update_attributes with different role
在 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]
但是在rails4中,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 中做类似的事情呢?
看看强大的参数。允许的属性应该在控制器而不是模型中确定
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
在 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]
但是在rails4中,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 中做类似的事情呢?
看看强大的参数。允许的属性应该在控制器而不是模型中确定
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