0

我有一个使用 CanCan 1.6 的 Rails 3.1 应用程序。我正在使用attr_protected ... :as => :api. 我想使用load_and_authorize_resource, 但也剥离受保护的字段。有任何想法吗?

编辑:这是我目前的解决方法:

在orders#new 中,我跳过load_resource并只是授权。我使用适当的范围直接初始化新订单:

@order = Order.new(params[:order], :as => :api)

然后手动设置用户:

@order.user = current_user

当然不是什么大不了的事,但不如让 CanCan 本地加载和授权,就像我在其他地方做的那样优雅。

4

1 回答 1

0

通常,如果您只有几个受保护的字段要提交,那么将值从参数哈希中提取并手动分配会更容易。

##save the parameter and delete it from the hash
role      = params[:employee][:role_id]
params[:employee].delete("role_id")

##create object and assign parameter manually
@employee = Employee.new(params[:employee])
@employee.role_id = role

如果你有很多属性,你可以自动化手动分配。

##list protected attributes and create new employee
attr = Employee.protected_attributes ##["id", "type", "name"]

@employee = Employee.new

##loop through params and manually send value
params[:employee].each do |p|
    @employee.send("#{p}=", params[:employee]["#{p}"])
end

没有时间完全测试第二部分,但这应该会让你朝着正确的方向前进。

于 2012-07-30T21:12:52.157 回答