好的家伙这个让我沮丧了几个小时了。我搜索过,似乎找不到其他人有类似的问题。任何帮助将不胜感激。
我正在尝试向控制器发出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