2017-12-08 7 views
0

私は本当の初心者です。Route.rbのルート名をコントローラのアクションで取得する

複数のルートを1つのコントローラから取得できますが、多くのアクションを実行できますか?例えば

resources :something 

GET "何かの#インデックス"、 "何かの#ショー"、 "何かの#更新" ...など。

アクションからルート名を取得するコマンドがあるかどうか不思議です。例えば

、 "誓約"、

class PledgesController < ApplicationController 
    def home 
    end 

    def abc 
    end 

    def defg 
    end 

    def hijk 
    end 
end 

という名前のコントローラに任意のコマンドを取得することはできますが、 "#の家を約束"、 "#のABCは約束"、 "#のDEFGは約束"、 "#のHIJKを誓約しますか"?

+0

[ 'resources'](https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/mapper .rb#L1440)は、CRUD操作に対応する7つの異なるルートを作成します。これは定義されているため、「カスタム」コントローラーアクションで動作するように定義されていないようです。リソースでなければ、そうするのに似たものはないと私は思う。 –

+0

カスタム(非RESTful)ルートを定義する方法を尋ねていますか? – jeffdill2

答えて

0

リソースにカスタム、「非RESTfulな」ルートを追加するには、次の操作を行うことができます:

resources :pledges do 
    collection do 
    get :foo 
    end 

    member do 
    put :bar 
    end 
end 

collection -definedルートは全体としてPledgeに対する結果を生成します - と思うのはindexです。 show経路を考える -

member -defined経路はインスタンスPledgeに対する結果を生成します。

これはあなたのために、次のルートを生成します:

foo_pledges GET  /pledges/foo(.:format   pledges#foo 
bar_pledge PUT  /pledges/:id/bar(.:format)  pledges#bar 
pledges  GET  /pledges(.:format)    pledges#index 
      POST  /pledges(.:format)    pledges#create 
new_pledge GET  /pledges/new(.:format)   pledges#new 
edit_pledge GET  /pledges/:id/edit(.:format) pledges#edit 
pledge  GET  /pledges/:id(.:format)   pledges#show 
      PATCH  /pledges/:id(.:format)   pledges#update 
      PUT  /pledges/:id(.:format)   pledges#update 
      DELETE /pledges/:id(.:format)   pledges#destroy 
+0

私は興味があったコントローラの動作の名前に基づいてルートを自動的に作成できるかどうかは分かりました。しかし、とにかくあなたの答えに感謝:) –

+0

ナー、それを行う方法は - 正当な理由です。 :-) – jeffdill2

+0

それは?ありがとうございました!! –

0

安心していない場合は、すべてのカスタムアクションを定義する必要があります(ですが、残りの規約に従うことを強くお勧めします)。たとえば:

get 'pledges' => 'abc' 
post 'pledges' => 'defg' 
put 'pledges' => 'hijk 
+0

さて、ありがとう、ありがとう:) –

関連する問題