2012-04-19 7 views
0

さて、DRY!だから私は、私のすべてのコントローラ(私の場合はコピー)に新しいアクション(既存の新しい、編集のような)を追加するのは簡単だと思った。しかし、どのようにすべてのコントローラに新しいルートを設定しますか?Rail3 |すべてのコントローラの標準的なルート/アクションを作成するには?

routes.rbの内部に 'ループ'(つまり%w()...が入りません。

私はDRYが正しいと思いますか?したがって、各リソースのroutesファイル内にアクションをコピーする必要はありません。私はあなたがデフォルトのアクション/ルート(インデックス、新しい、編集など)を簡単に拡張できるはずだと思いますか?

ありがとうございます!

+0

-1何のためにこの

class ActionDispatch::Routing::Mapper def resources_with_copy(*resources, &block) block_with_copy = lambda do block.call member do post :copy end end resources(*resources, &block_with_copy) end end 

のようなものを言うのですか?この質問で何が間違っていますか? – Roger

答えて

0

AFIKはデフォルトでこれを行う方法はありません。あなたはこの機能を含めるためのサルのパッチリソース可能性:

https://github.com/rails/rails/blob/b229bc70e50ec0887c5bb3aaaa9c6ee8af054026/actionpack/lib/action_dispatch/routing/mapper.rb#L982

は...しかし、私の勘では、この機能は、あなたが何をしたいのかいるので、別の方法で作成することができるかどうかを再検討したほうが良いでしょうです"オフライン"です。

1つのオプションは、モデルとIDを受け入れてクローンを作成するCloneController#newを作成することです。これはより乾燥しているように思えますし、あまりにも多くの "clone_article" "clone_blog" "clone_user"パスをあちこちにペッパーする必要はありません。

明らかにあなたが渡すことができます慎重にホワイトリストモデル/ IDSをしたいと思う。

+0

はい私は知っています。しかし、私はすべての私のコントローラのためのルート 'クローン'を追加する必要があります。だからあなたは/会社/ 1 /クローン/人/ 23 /クローンなど – Roger

+0

Ahh misread、あなたは答えを編集する、新しいアクションを作成したいと思った –

0

リソースのデフォルトのアクションに追加する方法がありませんソースを通じて探しています。

しかし、@juwileyによると、resources :itemというメソッドは、membercollectionのメソッドをロードするための単なるショートカットです。

あなたがやらなければならないことは、その後、あなたのroutes.rbをしてちょうど

resources_with_copy :items 
resources_with_copy :posts do 
    member do 
    post :share 
    end 
end 
... 
関連する問題