Rails,STI和嵌套资源

时间:2013-11-12 00:04:37

标签: ruby-on-rails inheritance routes sti

我有模型foo1foo2foo3foo4,它们是foo的子类。我有barbaz等模型。

模型barbaz包含foo类型及其所有子类型的对象。此外,每种类型都有一个名为next的行为。

现在我必须设置像

这样的路线
resources :bar do
  resources :foo do
    member do
      get :next
    end
  end
  resources :foo1 do
    member do
      get :next
    end
  end
  ...
end

我可以使用concern,以避免将其设置为barbaz,但我仍然需要将get :next添加到foo的每个子类型}。

是否有一些我不知道的轨道魔法?

1 个答案:

答案 0 :(得分:0)

假设你的问题是关于减少routes文件中的重复,你可以简单地循环遍历密钥数组:

[:bar, :baz].each do |parent|
  resources :parent do
    [:foo, :foo1, :foo2, :foo3, :foo4].each do |children|
      resources :children do
        member do
          get :next
        end
      end
    end
  end
end

但是,这看起来非常糟糕,所以您可能希望再次查看应用程序的设计并确定这是否真的有必要。另外,请记住,Rails期望复数键作为resources的参数,因此您可能需要弄清楚:foo1之类的复数是多少(:foo1s? )。