在第一次ajax调用之后,Rails form_for忽略“:remote => true'”

时间:2011-12-08 20:27:05

标签: ruby-on-rails ruby ajax form-for

好的家伙这个让我沮丧了几个小时了。我搜索过,似乎找不到其他人有类似的问题。任何帮助将不胜感激。

我正在尝试向控制器发出AJAX调用以更新line_item的数量属性。代码如下:

###Controller update action###

def update
  @line_item = LineItem.find(params[:id])
  @quote = @line_item.quote
  respond_with(@line_item, @quote) do |format|
    if @line_item.update_attributes(params[:line_item])
      format.html  { redirect_to(@quote,
                    :notice => 'Quantity was successfully updated.')}
      format.js
    else
      format.html  { redirect_to(@quote,
                    :notice => 'Oops!  James messed up again.')}
      format.js  { render 'shared/update_error' }
    end
  end
end

#####View code######

- @quote.line_items.each do |item|
    = form_for item, :remote => true do |f|
      %tr
        %td.quantity_cell
          = f.text_field :quantity, :size => 2
          = image_submit_tag("update_quantity_button.png", :id => "quantity_update")

####Javascript for the callback####

$("#quote_show_parts").html("<%= escape_javascript(render 'shared/show_quote') %>");

问题是第一个请求将按预期工作。执行调用,更新记录,并在页面上反映更改。检查页面源,您可以在表单中看到“_method ...'put'”隐藏标记。

如果我更改字段中的值并再次点击按钮,则会出现路由错误:

Started POST "/line_items/90" for 127.0.0.1 at 2011-12-08 15:11:45 -0500

ActionController::RoutingError (No route matches [POST] "/line_items/90"):

现在,似乎忽略了_method标记(在检查页面源时仍然存在)并且正在进行POST调用。无论哪种方式都为该URL定义了POST路由,所以我不确定为什么会发生“无路由”错误。如果我删除':remote =&gt; true'功能按预期工作,没有问题。

非常感谢你们的进步。

编辑:添加了型号代码:

class LineItem < ActiveRecord::Base
  belongs_to :part
  belongs_to :quote

  def total_price(company)
    part.price(company) * quantity
  end
end

0 个答案:

没有答案