我使用CanCan 1.6获得了Rails 3.1应用程序。我用attr_protected ... :as => :api
保护了各种属性。我想使用load_and_authorize_resource
,但也要删除受保护的字段。有什么想法吗?
编辑:这是我目前的解决方法:
在订单#new中,我正在跳过load_resource
并且只是授权。我使用适当的范围直接初始化新订单:
@order = Order.new(params[:order], :as => :api)
然后手动设置用户:
@order.user = current_user
当然不是一件大事,但不像让CanCan本地加载和授权那样优雅,就像我在其他地方一样。
答案 0 :(得分: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
没有时间对第二部分进行全面测试,但这应该会让你朝着正确的方向前进。