2013-07-04 12 views
6

私はアクションの数とコントローラ持っCRUDアクションなしでコントローラをルーティングする方法は?</p> <pre><code>class TestsController < ApplicationController def find end def break end def turn end end </code></pre> <p>私はそうのように私の<code>routes.rb</code>ファイルに追加:

resources :tests 

を、私は、次の余分なラウンドを参照してくださいrake routesタスクを実行します。

tests GET /tests(.:format)   tests#index 
      POST /tests(.:format)   tests#create 
new_test GET /tests/new(.:format)  tests#new 
edit_test GET /tests/:id/edit(.:format) tests#edit 
    test GET /tests/:id(.:format)  tests#show 
      PUT /tests/:id(.:format)  tests#update 
      DELETE /tests/:id(.:format)  tests#destroy 

私のコントローラには上記の操作がありません。では、これらのルートの生成/予想を避けるためにRailsにどのように伝える必要がありますか?

+3

あなたは 'リソースを追加していないし、それらのルートを生成したくない場合は:あなたのルートファイルに "テストします。 – Mischa

+0

ええ、私はそれを行うことができますが、私はコレクションとメンバーを定義するために杖を使用します。だから私はリソースを定義することを好む。 – Roman

+0

なぜコレクションとメンバーを定義したいのですか? – Mischa

答えて

9

あなたは、このようなルートにしたいアクションを指定することができます。

resources :tests, except: [:new, :create, :edit, :update, :destroy] do 
    collection do 
    get 'find' 
    get 'break' 
    get 'turn' 
    end 
end 
+0

これはまだ 'new'、' create'、 'edit'、' update'などのルートを生成します。彼は[ non-resourceful routes](http://guides.rubyonrails.org/routing.html#non-resourceful- routes)を参照してください。 – Mischa

+0

必要ならば 'resources:tests:[:new、:create、:edit]'を除いて単純に避けることができます。 –

+0

これは非常に奇妙な回避策です。すべての手助けのルートを除いて、すべての手助けのルートを生成してください。 – Mischa

1

あなたが安らかなルートをしたい、resourcesを使用していない、それ自身の上の各パスとアクションを指定しない場合。

post '/tests/add/:id' => 'tests#add' 
25

ちょうどCRUDせずに、将来のための答え、ルートの簡単な方法を追加します:

resources :tests, only: [] do 
    collection do 
    get 'find' 
    match 'break' 
    match 'turn' 
    end 
end 

# output of rake routes 

find_tests GET /tests/find(.:format) tests#find 
break_tests  /tests/break(.:format) tests#break 
turn_tests  /tests/turn(.:format) tests#turn 

を、またはその代わりresources

namespaceを使用

get '/tests/find' => 'tests#find' 
post '/tests/break' => 'tests#break' 
post '/tests/turn' => 'tests#turn' 

そして、あなたはそのようのparamsを指定します

namespace :tests do 
    get 'find' 
    match 'break' 
    match 'turn' 
end 

# output of rake routes 

tests_find GET /tests/find(.:format) tests#find 
tests_break  /tests/break(.:format) tests#break 
tests_turn  /tests/turn(.:format) tests#turn 
Railsの4.(レール4.xの原因 match method has been deprecatedまたは最新)

resources :tests, only: [] do 
    collection do 
    get 'find' 
    get 'break' 
    get 'turn' 
    end 
end 

使用するために

namespace

namespace :tests do 
    get 'find' 
    get 'break' 
    get 'turn' 
end 
+0

名前空間は私に正しい答えのようです。 – rubyprince

関連する問題