我试图学习干掉我的代码,但遇到了一个问题,
我用控制器和路径选项确定我的路线
scope path: '/administrators', controller: :administrators do
get 'unverified' => :unverified
patch 'verify/:id' => :verify
get 'reported' => :reported
get 'ban_user' => :ban_user
patch 'execute_ban/:id' => :execute_ban
end
所以这是我到目前为止所做的,所有get
链接都正常工作......但这使得patch 'execute_ban/:id' => :execute_ban
成为这样的ban user
的扩展:(也与验证相同)
verified GET /administrators/unverified(.:format) administrators#unverifie
PATCH /administrators/verify/:id(.:format) administrators#verify
reported GET /administrators/reported(.:format) administrators#reported
ban_user GET /administrators/ban_user(.:format) administrators#ban_user
PATCH /administrators/execute_ban/:id(.:format) administrators#execute_ban
现在我改变了我的link_to route = qazxsw poi
但它抛出一个路由错误,说没有路径匹配。
有什么东西是我缺失的,任何洞察力都会像往常一样。
谢谢
为什么不采用围绕被修改资源的更加宁静的设计呢?
link_to 'ban', ban_user_path(x.id), method: :patch
您不需要表单的不同路径并作用于资源 - 请改用HTTP谓词。
Rails.application.routes.draw do
resources :users do
get :unverified, on: :collection
get :reported, on: :collection
get :ban
patch :ban, action: 'execute_ban'
end
end
如果您只是为了授权而添加一个单独的控制器,那么它就是一种反模式,因为您只是为Pundit / CanCanCan应该处理的事情增加了更多的复杂性。