Simple Rails 3 Route is Failing - Нет совпадений маршрутов - PullRequest
5 голосов
/ 01 апреля 2011

В моем файле config / rout.Rb у меня есть:

  post "portal_plan_document/update"

Рейк-маршруты подтверждают это:

$ rake routes
portal_plan_document_update POST /portal_plan_document/update(.:format) {:controller=>"portal_plan_document", :action=>"update"}
....

В моем коде:* В моем журнале я вижу:

Started POST "/portal_plan_document/update" for 127.0.0.1 at 2011-03-31 18:04:37 -0400

ActionController::RoutingError (No route matches "/portal_plan_document/update"):

Я заблудился, что делать дальше.Любая помощь будет принята с благодарностью!

Я должен сказать, что я использую Ruby 1.9.2 и Rails 3.0.5.О, я перезапустил сервер (сервер WebBrick с сервером rails) после обновления route.rb.

Джереми

Ответы [ 3 ]

7 голосов
/ 06 апреля 2011

Разобрался! :) если у вас есть непустой объект, rails предполагает, что вы хотите обновить этот объект. то есть используйте «PUT» вместо «POST»

чтобы выполнить 'PUT', рельсы поместят скрытый ввод в форму с "_method" = "put". Итак, это выглядит как POST, но рельсы воспринимают это как PUT.

если вы действительно хотите просто обновить объект (то, что вы делаете, похоже), PUT лучше, и вам просто нужно переключить маршруты на PUT.

если (как и я) вы делаете что-то, что действительно требует POST (то есть, его нельзя отправить более одного раза безопасно), вы можете написать свою форму: например:

<%= form_for @plan_doc, 
:url => portal_plan_document_update_path, 
:html=>{:method => "POST"}, :remote => true do |f| %>

для подтверждения, посмотрите на сгенерированный исходный код HTML и убедитесь, что скрытое поле "_method" не установлено в "put"

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

У меня была такая же проблема при обновлении простого приложения с Rails 2 до Rails 3. Как вы можете догадаться, я обновлял все помощники "remote_form_for (@item) (..)" до синтаксиса "form_for: item remote => true (..)".

В моем случае это код из элемента items / _new.html.erb:

<%= form_for :item, :remote => true do |f| %>
<!--FIELDS-->
<% end %>

дал мне эту ошибку:

Запущено POST"/ items / new" для 127.0.0.1 в пт. 12 августа 18:19:23 +0200 2011

ActionController :: RoutingError (Нет подходящих маршрутов "/ items / new")

Как вы можете заметить, метод был правильным "POST", а не "PUT". Проблема заключалась в маршрутизации ... Я не знаю, почему, но когда частичный метод POST отправляется частичным, Rails направляет POST-запрос к маршруту "/ items / new" вместо "/ items". Даже если цель состоит в том, чтобы создать новый «элемент», запрос POST должен быть правильно (и RESTful) перенаправлен в «/items".

Этот код с явным действием и контроллером решил проблему:

<%= form_for :item, :remote => true, :url => { :controller => "items", :action => "create" } do |f| %>
<!--FIELDS-->
<% end %>
0 голосов
/ 01 апреля 2011

Попробуйте использовать вместо этого, пожалуйста:

:method => :post

Если это по-прежнему не работает, пожалуйста, потеряйте атрибут remote и попробуйте. Это работает без него?

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