2011-07-13 8 views
2

routes.rbを異なるコントローラを呼び出すことができます:)は、どのように私は私がちょうどむしろ簡単に思える問題、とのではなく、私のためではなくGoogleのために数時間を苦労しています

私は

を経由して、いくつかのルートを置きます
scope :path => '/:mandate_key', :controller => :tasks do 
    get '/'   => :index  #mandate_path 
    match '/import' => "import#index" 
    match '/clearance' => "clearance#index" 
end 

これまでのところ、とても醜いです!私は別のコントローラ(インポートとクリアランス)を2番目のパラメータに依存して呼び出す方法を探しています。このような何か:

:task_keyparams[:task_key]として認識されるべきであり、それが ImportControllerを呼び出す必要があり http://some.url/a_mandate_key/importのようなリンクをクリックした場合に呼び出さコントローラだから params[:task_key]

の値でなければなりません

scope :path => '/:mandate_key', :controller => :tasks do 
    get '/' => :index 
    scope :path => ':task_key', :controller => %{'task_key'} 
    get '/' => :index 
    end 
end 

解決策は簡単だと確信していますが、見つけにくいです!

答えて

2

時にはハイghly複雑なソリューションが、それはそんなに簡単かもしれない:[:mandate_key]

scope :path => '/:mandate_key' do 
    get '/'   => "tasks#index"  #mandate_path 
    get '/import'  => "import#index" 
    get '/clearance' => "clearance#index" 
end 

コントローラ「任務」がのparamsと呼ばれるhttp://localhost/mandateを呼び出すには、コントローラのインポート」であるhttp://localhost/mandate/importを呼び出す「任務」

を提供しますparamsと呼ばれる[:コントローラ]簡単な方法を試して「インポート」

を提供し、多くの場合、最良の方法です:)あなたの助け、ボフダンため

ありがとう!

1

あなたがそうどんな未知のURLを約

scope :path => '/:mandate_key', :controller => :tasks do 
    get '/'   => :index  #mandate_path 
end 
.... 
match ':mandate_key/:controller(/:action)' 

最初のスコープがしかし、ルート/:mandate_key/tasksと1 /:mandate_key/:controllerまたは/:mandate_key/:controller/:action秒と一致しますどのようにこのよう

派遣され、あなたのルートmatch ':controller(/:action(/:id))'の底に追加できます2番目の部分はroutes.rbファイルの末尾に定義する必要があります。そうでない場合は間違ったルートに一致します。

+0

私はparams [:task_key]を介してtask_keyを取得できません。 – klausinho

+0

これをより明確に表現するには:afte login aベースURLを取得しますhttp:// localhost:3000権限を選んだとき、 http:// localhost:3000/a_mandate /私のログインと任務に応じて、いくつかのタスクを手に入れます。そのうちの1つを選択すると、http:// localhost:3000/a_mandate/a_taskが提供されます 上記のコードでは、params [:mandate_key]を使って委任者の名前を取得できます。今はparams [:task_key]を介してタスクに同じものが必要で、最後のURLを呼び出すとタスクのコントローラを呼び出す必要があります – klausinho

+0

あなたのソリューションをチェックしましたが、探しているものが見つかりませんでした。 http:// localhost:3000/first_mandate - コントローラのタスクを呼び出す必要があります(上のコードの1行目のスコープで動作します) http:// localhost/first_mandate/import - コントローラを呼び出す必要があります'インポート' ます。http:// localhost /をfirst_mandate /クリアランス - コントローラを呼び出す必要があります 'すきま' ます。http:// localhost /をfirst_mandate /インポート/ first_action - コントローラ 'インポート' HTTPで 'first_action' メソッドを呼び出す必要があります: // localhost/first_mandate/clearance/another_action - コントローラ 'clearance'のメソッド 'another_action'を呼び出す必要があります – klausinho

関連する問題