Из моей формы Rails я получаю сообщение об ошибке 404.Кто-нибудь знает, как правильно настроить эту форму AJAX? - PullRequest
0 голосов
/ 03 апреля 2012
= form_tag :url => job_path(@job.id), :method => :post, :remote => true, :id => @job.id, do
        = submit_tag 'Save', :class => 'confirm-time'

Вот как я это создаю.Я просто добавляю туда несколько параметров.Большинство из которых, вероятно, не являются необходимыми.

Мой jQuery Call:

    $(".confirm-time").live("click", function(){
      $.post($(this).parents('form').attr('action'), function(){} );
      return false;
    });

И мой ответ:

Routing Error

No route matches "/jobs/171"

Но это определенно маршрут, потому что этоработает иначе.Кто-нибудь знает, что мне может не хватать?

Мои маршруты:

resources :jobs

С этим связано множество заданий - с заданиями.Но я подумал, что этого будет достаточно, потому что это простой пост в def udpate

Мои журналы:

Started POST "/jobs/171?method=post&remote=true&url=%2Fjobs%2F171" for 127.0.0.1 at 2012-04-03 14:09:23 -0400
  SQL (0.7ms)  SHOW TABLES
  SQL (0.9ms)  SHOW TABLES
[Barista] Compiling all scripts for barista
[Barista] Compiling all coffeescripts
[E20::Ops::Middleware::TransactionIdMiddleware] Transaction ID: e8c81711-3d8b-438e-b6d2-ba77f1bda40d

ActionController::RoutingError (No route matches "/jobs/171"):


Rendered /Users/elephanttrip/.rvm/gems/ruby-1.9.2-p318@shasta/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms)

1 Ответ

1 голос
/ 03 апреля 2012

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

/jobs/171?method=post&remote=true&url=%2Fjobs%2F171

Как видите, весь хэш параметров используется в качестве параметра URL, поскольку первый аргумент form_tag - это URL.

Это должно выглядеть так:

form_tag job_path(@job.id), :method => :post, :remote => true, :id => @job.id do

Вы также злоупотребляете помощниками *_path; Вы должны использовать job_path(@job) или просто передать сам объект Job:

form_tag @job, :method => :post, :remote => true, :id => @job.id do

Вы также используете неправильный метод. POST предназначен для создания новых объектов, а ваша форма обновляет существующий объект, который представляет собой запрос PUT. Вы либо захотите использовать :method => :put или (предпочтительно) drop form_tag все вместе и использовать form_for @job, который вычислит все для вас на основе объекта, который вы передаете:

form_for @job, :remote => true do |form|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...