Использование Rails по умолчанию: маршрутизация ресурсов для создания записи с помощью jQuery ajax - PullRequest
4 голосов
/ 14 ноября 2011

В моем приложении на Rails я пытаюсь использовать jQuery ajax для создания нового элемента с помощью метода create по умолчанию в моем контроллере.

Мой routes.rb выглядит так:

resources :items

Код на стороне сервера остается таким же, как он был сгенерирован:

  # POST /items
  # POST /items.json
  def create
    @item = Item.new(params[:item])

    respond_to do |format|
      if @item.save
        format.html { redirect_to @item, :notice => 'Item was successfully created.' }
        format.json { render :json => @item, :status => :created, :location => @item }
      else
        format.html { render :action => "new" }
        format.json { render :json => @item.errors, :status => :unprocessable_entity }
      end
    end
  end

И мой JavaScript:

$("#capture_input").focusout(function() { 
    var description = $(this).val(); 

    $.ajax({
      type: "POST",
      url: '/items/create.json',
      data: { 
        item: { 
          description : description
        } 
      },
      dataType: 'json',
      success: function(msg) {
        alert( "Data Saved: " + msg );
      }
    });
  });

Это кажется очень простым, но я получаю следующую ошибку:

ActionController::RoutingError (No route matches [POST] "/items/create.json"):

Мне удалось использовать метод update по умолчанию в аналогичной ситуации без каких-либо проблем. В чем здесь проблема?

РЕДАКТИРОВАТЬ: Исправлена ​​опечатка в коде rout.rb.

Ответы [ 2 ]

6 голосов
/ 14 ноября 2011

Примеры строк в вашем контроллере дают подсказку.

# POST /items
# POST /items.json
def create
...

Действие создания - это просто POST для /items.json, поэтому вам просто нужно изменить URL-адрес, который вы используете в своем jQuery, на '/items.json'.

1 голос
/ 14 ноября 2011

Что-то не так с вашим примером или с вашим кодом! Вы говорите в routes.rb у вас есть

resources :workitems

Что означает, что путь будет

/workitems/create.json

Но в вашем скрипте вы пытаетесь вызвать /items/create.json вместо /workitems/create.json.

Я думаю, вы должны проверить ваши маршруты. Rb или ваш пример.

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