ruby-on-rails - Rails 中的自定义动作路由继承
问题描述
我有以下控制器继承链(请注意,模型不继承,而是具有父子关系):EmployeesController < SitesController < CompaniesController
我有一个动作,companies#dashboard
子类继承。现在这是我的路由:
get "/company/dashboard(/:disguised_id)" => "companies#dashboard"
get "/site/dashboard(/:disguised_id)" => "sites#dashboard"
get "/employee/dashboard(/:disguised_id)" => "employees#dashboard"
但我想知道是否有更优雅的方式来为自定义操作设置这个继承链?
解决方案
您可以使用路由问题来重用路由集:
Rails.application.routes.draw do
concern :dashboard do
get '/dashboard(/:disguised_id)', action: :dashboard
end
scope :company, controller: :companies do
concerns :dashboard
end
scope :site, controller: :sites do
concerns :dashboard
end
scope :employee, controller: :employees do
concerns :dashboard
end
end
关注点可以包含在scope
、namespace
和resource
中resources
。这里更好的解决方案是将命名空间与单独的仪表板控制器一起使用:
Rails.application.routes.draw do
concern :dashboard do
get '/dashboard(/:disguised_id)', to: 'dashboard#show'
end
namespace :companies, path: 'company' do
concerns :dashboard
end
namespace :sites, path: 'site' do
concerns :dashboard
end
namespace :employees, path: 'employee' do
concerns :dashboard
end
end
这让您可以从已经负责对资源进行 CRUD 处理并使用继承的普通控制器卸下责任:
class DashboardController < ApplicationController
def show
# do something awesome
end
end
module Companies
class DashboardController < ::DashboardController
end
end
module Sites
class DashboardController < ::DashboardController
end
end
module Employees
class DashboardController < ::DashboardController
end
end
推荐阅读
- dart - vs code 1.47.1 自动重新格式化dart代码文件
- excel - 您可以将在 Excel 中创建的形状分组吗?
- postgresql - 为地理类型添加唯一约束
- html - 有什么更好的方法来创建这种可以在多个设备上保持响应以及使用 twitter 引导程序的精确布局?
- php - Laravel nova 使资源只显示用户的数据
- python - 代码在本地运行良好,但部署到 heroku 时得到“错误:(-215:断言失败)!image.empty()”
- java - 在自定义存储库中使用 SpringBoot 和 JPA Criteria Query 查询时间戳
- javascript - 通过ajax发送2个数组
- python - 如何减少处理大数据框的时间
- javascript - 使用javascript和php的src切换