路由 - 通过自定义整齐定义多个资源

时间:2010-02-26 08:56:00

标签: ruby-on-rails routing refactoring

我的路线失控,因为这是不可能的(如果我错了,请纠正我):

map.resources :english_pages, :as => :english, :spanish_pages, :as => :spanish do |article|

由于嵌套路线,事情正在失控(整洁)。

map.resources :english_pages, :as => :english, :member => {:manage => :get} do |article|
  article.resources :topics do |topic|
    topic.resources :posts
  end
end
map.resources :spanish_pages, :as => :spanish do |article|
  article.resources :topics do |topic|
    topic.resources :posts
  end
end

如何避免重复:

article.resources :topics do |topic|
  topic.resources :posts
end

是否有某种方法可以将路径存储为某个块,或者在我的情况下,可以单独定义english_pages和spanish pages别名?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您只需要进行一些元编程。

资源只是一个方法调用,无论如何,这些符号最终被评估为字符串,因此这变得非常容易。

[:english, :spanish].each do |language|
  map.resource "#{language}_pages", :as => language, :member => {:manage => :get} do |article| 
    article.resources :topics do |topic|
    topic.resources :posts
  end
end