代码之家  ›  专栏  ›  技术社区  ›  Dex

轨道3路线:干构件

  •  7
  • Dex  · 技术社区  · 14 年前

    我需要将以下成员方法添加到一些资源中,有没有办法将其干掉?

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

    在我的路线.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
    

    现在,my 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

    1 回复  |  直到 14 年前
        1
  •  7
  •   monocle    14 年前

    你不能在路由文件中定义一个方法吗?

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

    编辑

    我以前没用过这种技术。当我做“rake routes”的时候,它看起来很管用。无论如何,routes文件只是Ruby代码。只需小心定义的方法的名称,因为它是在ActionDispatch::Routing::Mapper的实例中定义的。

    # routes.rb
    
    MyApp::Application.routes.draw do
      puts self
      puts y self.methods.sort
    end
    
    # Terminal
    > rake routes