使用Rails默认的:resources路由来使用jQuery ajax创建记录

4
在我的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方法而没有任何问题。这里的问题是什么?

编辑:修正了routes.rb代码中的拼写错误。


当你运行 rake routes 命令时,你看到了什么?你能看到用 POST 创建 items 的路由吗? - Michal Kuklis
2个回答

6

您控制器中的示例代码可以提供一些线索。

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

创建操作只是向/items.json发出POST请求,因此您只需要在jQuery中使用的URL更改为'/items.json'。

1

你的示例或代码有问题!你在routes.rb中说:

resources :workitems

这意味着路径将是

/workitems/create.json

但是在你的脚本中,你尝试调用/items/create.json而不是/workitems/create.json

我认为你应该检查一下你的routes.rb或者你的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接