7

次のメンバー メソッドを多数のリソースに追加する必要があります。これを DRY する方法はありますか?

 member do
    get   :votes
    post  :up_vote
    post  :down_vote
  end

私のroutes.rbで

resources :news do
  resources :comments do
     member do
        get   :votes
        post  :up_vote
        post  :down_vote
      end
  end
end

resources :downloads do
  resources :whatever do
     member do
        get   :votes
        post  :up_vote
        post  :down_vote
      end
  end
end

編集

私は実際に次のようにモジュールに移動しました:

module Votable
  module RoutingMethods
    def votable_resources
      member do
        get   "up_votes"
        get   "down_votes"
        post  "up_vote"
        post  "down_vote"
      end
    end
  end # RoutingMethods
end

これで、routes.rb は次のようになります。

require 'votable'

include Votable::RoutingMethods

MyApp::Application.routes.draw do

  namespace :main, :path => "/" do
    resources :users do 
      resources :comments do
        votable_resources
      end
    end
  end

end

インライン コメントを参照してください。ただし、名前付きルートを次のようにしたい:main_users_comments_up_votes

4

1 に答える 1

7

ルートファイルでメソッドを定義することはできませんか?

def foo
  member do
   get   :votes
   post  :up_vote
   post  :down_vote
  end
end


resources :news do
 resources :comments do
   foo
 end
end

編集

私は以前にこのテクニックを使用したことがありません。「レーキルート」を実行したときにうまくいったようです。とにかく、routes ファイルはただの Ruby コードです。ActionDispatch::Routing::Mapper のインスタンスで定義されているため、定義するメソッドの名前には注意してください。

# routes.rb

MyApp::Application.routes.draw do
  puts self
  puts y self.methods.sort
end

# Terminal
> rake routes
于 2010-11-24T03:09:11.037 に答える