Concerns
重复使用已经定义的路由,避免 config/routes.rb
里出现重复代码,和生成路由规则没有直接联系。
方法
解释
concern
定义(一次只能定义一个)
concerns
调用(一次可调用一个或多个)
举例(使用 concern & concerns 之前):
AppName::Application.routes.draw do
resources :messages do
resources :comments
resources :categories
resources :tags
end
resources :posts do
resources :comments
resources :categories
resources :tags
end
# ...
end
举例(使用 concern & concerns 之后):
AppName::Application.routes.draw do
concern :sociable do
resources :comments
resources :categories
resources :tags
end
resources :messages do
concerns :sociable
end
resources :posts do
concerns :sociable
end
# ...
end
再次举例:
concern :commentable do
resources :comments
end
concern :image_attachable do
resources :images, only: :index
end
# concerns 可以跟多个 concern
resources :messages, concerns: [:commentable, :image_attachable]
namespace :posts do
concerns :commentable
end
一些疑问?
即使是去除重复代码,也还有其它方法实现。如:
AppName::Application.routes.draw do
def add_posts
resources :posts, :only => [:create, :destroy]
end
resources :events do
add_posts
end
end
有必要使用 DSL 吗?
在 讨论 里 dhh 回答了此问题。
最后更新于
这有帮助吗?