我有这个设置:
routes.rb
:
resources :orders, only: [] do
# many other member actions
# ...
namespace :confirm, module: :orders do
controller :confirm do
get :cash
end
end
end
orders/confirm_controller.rb
:
class Orders::ConfirmController < ApplicationController
load_and_authorize_resource class: Order,
id_param: :order_id,
instance_name: :order
def cash
end
end
ability.rb
:
can :cash, Order do |order|
order.buyer == user
end
这个想法是:由于OrdersController
已经超载了近20个动作,我想将新动作移动到嵌套控制器。上面的代码正在运行,但我觉得这部分:
load_and_authorize_resource class: Order,
id_param: :order_id,
instance_name: :order
可以更轻松地完成。我拥有的能力是父控制器,而不是命名空间嵌套控制器,所以如果有人在cash
中定义OrdersController
方法,将会使用相同的能力,这是不好的。那么还有更好的方法吗?