Пытается создать POST-запрос, но не получает ни одного маршрута. [GET] - PullRequest
1 голос
/ 19 августа 2011

Я пытаюсь сделать что-то похожее на Railscasts # 255 , но я получаю сообщение об отсутствии маршрута:

В файле routes.rb Райана:

    post "versions/:id/revert" => "versions#revert", :as => "revert_version"

В контроллере, где он использует маршрут, versions_controller.rb

    link = view_context.link_to(link_name, revert_version_path(@version.next, :redo => !params[:redo]), :method => :post)
    redirect_to :back, :notice => "Undid #{@version.event}. #{link}"

В моем routes.rb

    post "/approve/:id" => "listings#approve", :as => "listing_approve"

и просмотр, где я использую свою ссылку:

    <%= link_to 'Approve Content', listing_approve_path(@listing), :method => :post %>

Мои тесты возвращают мне ActionController::RoutingError: No route matches [GET] "/approve/1"

Если я оставляю метод как GET, все работает .. Использование rails 3.1.0rc5.Любые указания относительно того, что я делаю не так, были бы очень благодарны ..

РЕДАКТИРОВАТЬ: файл rout.rb (последняя строка установлена ​​как match прямо сейчас, чтобы работать)

RLR::Application.routes.draw do

  root :to => "home#index"

  devise_for :users, :controllers => { :registrations => "registrations" }
  devise_for :users

  match '/user' => "layouts#index", :as => :user_root

  resources :users, :only => :show
  resources :layouts, :only => [:index, :show]
  resources :listings
  resources :features
  resources :orders

  match "/preview/:id" => "listings#preview", :as => "listing_preview", :via => "get"
  match "/approve/:id" => "listings#approve", :as => "listing_approve"

end

Ответы [ 3 ]

1 голос
/ 22 августа 2011

Хммм, это выглядит прямо на мой взгляд.Тест звучит так, как будто он генерирует GET вместо POST, поэтому может возникнуть проблема с вызовом link_to.У вас есть: method =>: пост там, так что все должно быть в порядке.http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to, по-видимому, указывает на то, что link_to сгенерирует некоторый javascript для вызова POST при нажатии (и что пользователи с отключенным javascript получат обычную ссылку GET, если вы не используете: href = "#"), поэтому это может бытьпотому что ваш тестовый движок не запускает javascript.

Вы можете исправить это, изменив его на кнопку, которая представляет скрытую форму, но это может быть не то визуальное представление, которое вам нужно.

0 голосов
/ 13 марта 2012

У меня возникла та же проблема в моем приложении rails, и я решил ее так же, как вы, выполнив матч via:: вместо матча via:: post.Я думаю, что по какой-то причине, когда вы отправляете запрос в формате /thing /: id, он автоматически принимает запрос [GET] и ищет маршрут получения.Это, конечно, вызовет проблемы в ваших маршрутах, если у вас есть: POST.

Если у кого-то есть лучшее решение или идея относительно того, почему вы не можете отправить запрос на публикацию в формате «/ что-то /: id», дайте мне знать, пожалуйста.

0 голосов
/ 19 августа 2011

Это может быть приоритетом - используется первое подходящее определение маршрута в rout.rb, поэтому, если у вас есть маршрут ресурсов или что-то в этом роде, оно может совпадать с этим первым.

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