Rails路由:一个控制器。一种型号。多条路线

时间:2013-01-31 18:18:23

标签: ruby-on-rails-3 routing

我有一个名为Factors的模型,它有两种类型:['personal', 'advisor']

我希望有一个控制器FactorsControllerFactors这两种类型都有相同的操作,但只使用一种类型。它使用的类型基于用于到达那里的路线。例如,

/personal将转到factors#index并使用@factors填充Factor.personal /advisors将转到factors#index并使用@factors填充Factor.advisors

我该如何设置呢?

3 个答案:

答案 0 :(得分:4)

您可以添加路线

type_regexp = Regexp.new([:personal, :advisor].join("|"))
resources :factors, path: ':type', constraints: { type: type_regexp }

并且您将能够在控制器中使用params[:type],这样您就可以在将来更改路线时提供灵活性。

这也使您能够在视图中使用factors_path(type: :personal)

答案 1 :(得分:2)

您可以将其添加到您的路线:

resources :factors, :path => :personal
resources :factors, :path => :advisor

这将有/ personal和/ advisor。然后,您希望让因素#index决定使用哪条路径(您可以使用request.url)并相应地填充@factors

答案 2 :(得分:0)

我会创建三个控制器:

class PersonalController < FactorController
  def factor
    Factor.personal
  end
end

class AdvisorController < FactorController
  def factor
    Factor.advisors
  end
end

class FactorController < ApplicationController
  #all the shared stuff here, using the factor method from each in your methods
end

然后路线将是:

route '/personal' => PersonalController#index
route '/advisors' => AdvisorController#index