カテゴリに2つの異なるモデルが表示されます。私は、「/いくつかのカテゴリ名/一部-fooという名」、 "のようなURLをロードする。これは、正常に動作しますRailsで同じURLフォーマットの異なるコントローラにルーティングするにはどうしたらいいですか?
ActionController::Routing::Routes.draw do |map|
map.top_list ':category/:foo', :controller => 'foo', :action => 'show'
map.top_list ':category/:bar', :controller => 'bar', :action => 'show'
end
:私のroutes.rbをでは、私はこのような何かを持っていると思いますいくつかの-fooという名は、」そうのようなFooControllerによってロードすることができます。
class FooController < ApplicationController
def show
@foo = Foo.find_by_url! params[:foo]
end
end
しかし、私はのように、バーを要求しようとすると、 『/いくつかのカテゴリ名/いくつかのバー名』、私が取得します"ActiveRecord :: RecordNotFound in FooController#show"
ActionController::Routing::Routes.draw do |map|
map.top_list ':category/:foo', :controller => 'foo', :action => 'show', :requirements => { :name => /^foo-/ }
map.top_list ':category/:bar', :controller => 'bar', :action => 'show', :requirements => { :name => /^bar-/ }
end
しかし、名前にこの制限を強制的に:私は、このようなルートを定義し、すべてのFooの名前は「foo-」で始まり、すべてのバーの名前は「バー - 」で始まることを要求することにより、この問題を解決することができることを知っていますかなり最適ではありません。私はかもしれない、私のために働くかもしれない以下を見つけた:Different routes but using the same controller for model subclasses in Rails。しかし、私はその例にはあまり慣れていないので、これが私の問題を解決するかどうかはわかりません。私のFooとBarControllerがCategoryControllerから継承しなければならないことも素晴らしいことではありません。
私に起こった1つの考えは、私がFooを検索しようとする可能性があり、失敗した場合はBarControllerにフォールバックすることでした。私はFooControllerでこれを簡単に実行してBarControllerにリダイレクトすることができますが、バーのすべての要求はRailsログにFooController#showとして記録されるため、これは問題ありません。しかし、URLの基本名に基づいてルーティングするものを決定するメソッドを呼び出すようにルートを設定することができれば、必要な動作を得ることができます。例えば
ActionController::Routing::Routes.draw do |map|
is_a_foo = Proc.new {|name| Foo.find_by_url! name && true }
map.top_list ':category/:foo', :controller => 'foo', :action => 'show', :requirements => { :name => is_a_foo }
map.top_list ':category/:bar', :controller => 'bar', :action => 'show'
end
bog-standard Rails 2でこれを行う方法はありますか?
次の質問に答えがあった場合は、http:// stackoverflowというこの質問にも答えます。com/questions/5767222/rails-call-another-controller-action-from-a-controller –