您好我正在尝试使用ajax更新rails表单,但我不知道如何。
我对rails中的ajax的了解是:我需要在表单中设置remote:true然后我必须创建一个名为相同的文件,而不是* .html.erb我做* .js.erb
现在我在show.html.erb中使用一个表单调用方法edit.html.erb ...我是否必须将js代码写入edit.js.erb或show.js.erb?
我收到了复选框,每次点击它们都应该更新。
有人能指出我正确的方向并提供一些jquery代码吗?我不知道如何解决这个问题。
提前致谢
show.html.erb
<%= form_for @order, remote:true do |g| %>
<%= g.label "recieve sms?" %>
<%= g.check_box :send_sms %>
<%= g.label "recieve email?" %>
<%= g.check_box :send_email %>
<% end %>
控制器:
def update
@order = Order.find(params[:id])
respond_to do |format|
if @order.update_attributes(params[:order])
format.js { render json: @order, status: "200" }
else
format.js { render json: @order, status: "400" }
end
end
end
有些尝试:
$.ajax('/orders/613', {
type: 'PUT',
success: function(data) {
alert('works !');
}
});
答案 0 :(得分:0)
好的,你没有提交按钮所以我猜你只想要每次点击一次ajax请求。在这种情况下,您不需要添加remote: true
,因为您实际上并未“提交”表单。
您需要将ajax请求绑定到表单。默认情况下,在已存在的对象的form_for上,生成的类名称(这是特定于form_for帮助程序,如果您使用的是simple_form则不同)在您的情况下称为edit_
edit_order
所以你可以将你的ajax请求绑定到该类。
另外,我发现在erb中设置发布到的位置的URL更容易。
所以要采取的步骤是:
步骤1 - 将提交网址添加到js变量
<%= javascript_tag do %>
window.ordersURL = '<%= order_path(@order.id) %>';
<% end %>
步骤2 - 设置ajax请求以使用url,将其设置为javscript,以便更新操作知道要呈现的格式,将请求类型设置为PUT,并创建数据哈希。 (这是咖啡脚本,但可以随意转换为js) - 这个文件将是app_name / app / javascripts / order.js.coffee
$(document).ready ->
$(".edit_order").on "change", ->
url = ordersURL
$.ajax
url: url
type: "PUT"
dataType: "script"
data:
order:
receive_sms: $("input[name='order[send_sms]']").is(':checked')
receive_email: $("input[name='order[send_email]']").is(':checked')
然后,您可以在更新操作中执行任何操作。这些都不需要js.erb文件,除非你想在检查或取消选中后屏幕上的内容发生变化。