2009-07-16 2 views
3

Есть ли способ поиска HTML-кода для данного действия контроллера? Например, я хотел бы иметь возможность связывать GET с индексом и PUT с обновлением. Я хочу иметь возможность делать это динамически на основе маршрутов.Найти HTML-глагол для действий в rails

Я могу получить методы действий для каждого контроллера с помощью Controller.action_methods, но это возвращает набор методов действий. В идеале я бы хотел хэш формы: {:action => :verb}.

ответ

0

:method является частью :conditions хэша вы можете передать в map.connect

map.connect 'post/:id', :controller => 'posts', :action => 'create_comment', 
       :conditions => { :method => :get } 
+1

Я ищу по существу запроса на карту, чтобы найти способ действия. Поэтому в вашем примере я хотел бы иметь возможность начать с «create_comment» и найти способ: post. –

2

Прочитайте задачу рек маршрутов, что обеспечит понимание:

например:

users GET /users(.:format)  {:controller=>"users", :action=>"index"} 

я предполагаю это то, что вам нужно?

+1

Вот данные, которые я действительно ищу, но теперь, как я хочу это получить. Я пытаюсь создать простые тестовые примеры для всех моих действий, требующих аутентификации пользователей. См. Мой предыдущий вопрос: http://stackoverflow.com/questions/1137589/is-it-possible-and-or-advisable-to-generate-tests-dynamically-in-rails. Я пытаюсь запросить контроллер для его действий и найти, какой глагол они связаны для создания переменной действий в этом примере. –

+0

/Library/Ruby/Gems/1.8/gems/rails-2.3.2/lib/tasks/routes.rake –

+0

@BryanWard У меня была такая же проблема, как и вы - наконец, реальный ответ ниже (только через два года // использование рельсов 3.2+) –

0

Чтобы обеспечить полезный объект со всеми контроллерами, действий и связанных с ними глаголов

def all_routes 
    @all_routes ||= Rails.application.routes.routes.map do |route| 
      { alias: route.name, 
      path: route.path.spec.to_s, 
      controller: route.defaults[:controller], 
      action: route.defaults[:action], 
      verb: route.verb.source.to_s.delete('$'+'^') 
      } 
    end 
end 
Смежные вопросы