Нет маршрутов в Rails 3.0.4 - PullRequest
5 голосов
/ 20 февраля 2011

Давно смотрю на эту проблему. Вот ошибка, которую я получаю, когда пытаюсь просмотреть страницу.

No route matches {:action=>"confirm", :controller=>"locations"}

Это то, что я имею в виду.

<%= form_for(@location, :url => { :action => :confirm }) do |f| %>
<% end %>

И я думаю, что мой файл маршрутов настроен правильно.

Finder::Application.routes.draw do
  resources :locations do
    member do 
      post :confirm
    end
  end

  root :to => 'locations/index'
end

Есть идеи?

Изменено:

Побежал по рейк-трассам и понял, что я считаю правильным.

confirm_location POST   /locations/:id/confirm(.:format) {:action=>"confirm", :controller=>"locations"}

Ответы [ 4 ]

5 голосов
/ 20 февраля 2011

Вы можете легко отлаживать свои маршруты в будущем, запустив $ rake routes и просмотрев выходные данные. ;)

Я думаю , что происходит, так это то, что ваш post :confirm не регистрирует ожидаемый маршрут. В руководствах match и его братья принимают строку в качестве сегмента URL следующим образом:

resources :locations do
  member do
    post 'confirm'
  end
end

Обратите внимание, что «подтверждение» теперь является строкой, а не символом.

Если это не поможет, запустите $ rake routes и прикрепите вывод к вашему вопросу.

Обновление

После просмотра вашего рейка я думаю, что вам просто нужно указать метод POST на вашем form_for:

<%= form_for(@location, :url => { :action => :confirm }, :method => :post) do |f| %>
<% end %>

Вы также можете сделать это более читабельным, используя тот вспомогательный метод, который определяет Rails:

<%= form_for(@location, :url => confirm_location_path(@location), :method => :post) do |f| %>
<% end %>
1 голос
/ 11 мая 2011

Убедитесь, что form_for не крадется в скрытом поле с помощью _method = put, если вы объявили маршрут как принимающий только сообщение в вашем файле маршрутов.

1 голос
/ 20 февраля 2011

Попробуйте добавить :method => :post к вашему form_for

<%= form_for(@location, :url => { :action => :confirm }, :method => :post) do |f| %>
<% end %>
1 голос
/ 20 февраля 2011

Вы определили действие confirm в вашем LocationsController?

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