2009-08-12 27 views
1

Ruby On Railsルーティングフレームワークでは、単一のルート内のすべてのロジックに基づいて呼び出すコントローラまたはアクションを決定する方法はありますか?Ruby On Railsビジネスロジックを使用したルーティング

たとえば、URLがzip/354で、整数が偶数の場合はfooアクションを呼び出し、奇数の場合はbarアクションを呼び出したいとします。擬似ルビーを使用するには:私は物事のルーティング側についてあまりわからない

map.connect 'zip/:id', :requirements=>{:id=>/^\d+$/} do |id| 
    :controller=>'c', :action=>'foo' if id.to_i % 2 == 0 
    :controller=>'c', :action=>'bar' if id.to_i % 2 != 0 
end 

答えて

4

をしかし、あなたは別のアクションに基づいてアクションの呼び出しを持つことができます。id

def zip 
    id = params[:id].to_i 
    if(id%2 == 0) 
    foo 
    else 
    bar 
    end 
end 

しかし、あなたがするけれども持っていることがありそれはすでに。

3

私は私のルートで少し実験を試してみましたが、これは

# route to the even action 
map.connect 'foo/:code', :controller => 'bar', 
     :action => 'even', :requirements => { :code => /\d+(2|4|6|8|0)/ } 

# route to the odd action 
map.connect 'foo/:code', :controller => 'bar', 
     :action => 'odd', :requirements => { :code => /\d+(1|3|5|7|9)/ } 

を動作するように見えたそれは私には少しハックようだと、私はそれはおそらく非常に壊れやすいと主張しませんが、それは仕事を取得しています完了しました。

編集:ルーティング要件で許可されていないため、アンカー(^または$)をルートに配置しませんでした。フレームワークは、彼らがそこにいることを意味します。したがって、ルーティングパーサーによれば、

/\d+(1|3|5|7|9)/ == /^\d+(1|3|5|7|9)$/ 
関連する問題