Могу ли я связать параметр после подчеркивания в маршруте Rails 2.3? - PullRequest
1 голос
/ 24 марта 2011

Чтобы обеспечить обратную совместимость, нам нужно сопоставить /sitemap_1234000.xml с контроллером карты сайта с 1234000, переданным в качестве идентификатора.Я попытался

map.connect '/sitemap_:id.xml', :controller => 'sitemap',
                            :action => 'show'

, но затем, когда я сделал

assert_routing '/sitemap_1234000.xml', :controller => 'sitemap', 
                                       :action => 'show',
                                       :id => "1234000"

, мне сказали, что для /sitemap_1234000.xml нет маршрута.Можно ли связать параметр после подчеркивания в маршруте rails 2.3?

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

После некоторого рытья внутри рельсов вот что я придумал:

config/initializers/bound_parameter_after_underscore.rb

module ActionController
  module Routing
    class RouteBuilder
      def initialize_with_bound_parameter_after_underscore
        initialize_without_bound_parameter_after_underscore
        @nonseparator_regexp = /\A([^#{Regexp.escape(separators.join)}:\*]+)/
      end

      alias_method_chain :initialize, :bound_parameter_after_underscore
    end
  end
end

Это препятствует появлению двоеточия и звездочки в статических сегментах. Ранее регулярное выражение, которое ищет статические сегменты, потребляло все sitemap_:id; теперь он потребляет sitemap_ и оставляет :id, который затем распознается так, как вы надеетесь.

0 голосов
/ 24 марта 2011

Вы можете использовать подстановочные знаки:

map.connect '/sitemap_(*id).xml, :controller=>'sitemap', :action=>'show'

Тогда params [: id] должен дать вам то, что вы хотите.

Не проверено - дайте мне знать, если это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...