rails使用ajax更新复选框值

时间:2013-11-19 12:25:17

标签: ruby-on-rails ruby-on-rails-4

您好我正在尝试使用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 !');
    }
});

1 个答案:

答案 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文件,除非你想在检查或取消选中后屏幕上的内容发生变化。