'ActionView :: Template :: Error - нет совпадений маршрута', передавая параметры "старого стиля" для оператора "link_to" - PullRequest
3 голосов
/ 29 июля 2011

Я использую Ruby on Rails 3.0.9, и у меня возникла эта проблема: Проблема при установке параметра ': controller' для оператора 'link_to' . Никто не ответил решением, но, пытаясь и снова пытаясь найти и решить проблему, я обнаружил, что при передаче параметров «старого стиля» (то есть с использованием параметров controller и action вместо именованных путей маршрута) иногда link_to не работает должным образом (то есть вы получаете ошибку ActionView::Template::Error - No route matches, хотя, если у вас есть контроллер и правильно заданные маршруты). В любом случае вы можете установить для этого что-то вроде следующего:

<%= link_to("New article", {:controller => '../', :action => 'new'}) %> # Note the "'../'"

и это работает.

Я хотел бы знать , когда и , почему , в общем, бывает: опция controller кажется "вынужденной" ссылаться на относительный или абсолютный путь, а не на параметр контроллера, который вы передали.

То есть, если я установил :controller => articles и использую приведенный выше код в файле представления, управляемом controllers/article/categories_controller.rb, я получаю следующую ошибку:

`ActionView::Template::Error (No route matches {:controller=>"articles/categories/articles", :action=>"new"})`

потому что, как сказано выше, контроллер, кажется, ссылается на путь /articles/categories вместо пути /articles (как и должно быть, поскольку в этом примере я установил контроллер на articles). Может быть это проблема роутера?

1 Ответ

1 голос
/ 10 декабря 2011

«Ошибка отсутствия маршрута» обычно возникает, когда в файле rout.rb не указан правильный маршрут. Он не имеет ничего общего с абсолютным / относительным путем.

...