Rails 3 маршрута с расширенным регулярным выражением: ограничения - ошибка? - PullRequest
1 голос
/ 04 октября 2010

В моем приложении на Rails 3 есть следующий маршрут.

post 'games/:id/:task/:card_id' => 'games#perform', :as => :perform

... который, очевидно, разрешает такие запросы, как button_to("Foo", {card_id=>2, :action=>:perform, :task=>"foo"}), сопоставление с URL /games/1/foo/2.

Я бы хотел ограничить набор задач, которым соответствует маршрут.Документы Rails API указывают, что «Ограничения могут включать модификаторы регулярных выражений« ignorecase »и« расширенный синтаксис ».Однако следующее работает, как и ожидалось:

post 'games/:id/:task/:card_id' => 'games#perform', :as => :perform, :constraints => {:task => /(foo|bar)/}

Но следующее не работает:

post 'games/:id/:task/:card_id' => 'games#perform', :as => :perform, :constraints => {:task => /(foo|
                                                                                                 bar)/x}

В последнем случае ссылка button_to, указанная выше, создает URL: /games/perform?card_id=2&task=foo.

Это ошибка или я что-то не так делаю?

1 Ответ

1 голос
/ 14 апреля 2011

Да, есть ошибка в обработке RegexpWithNamedGroups для Ruby 1.8.x, потому что он подделывает синтаксис именованных групп регулярных выражений 1.9 способом, который несовместим с модификаторами регулярных выражений.

Проблема в том, чтос 1.8 Rails использует простой индекс группы пар в регулярном выражении для сопоставления с именем.Когда вы добавляете модификатор к регулярному выражению, внутренне это создает дополнительную группу, которая отбрасывает индекс на единицу.

Обходной путь должен использовать 1,9, или не использовать модификатор.

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