rails中的ajax:remote:对于未提交

时间:2017-02-28 18:54:24

标签: ruby-on-rails ruby ajax

我知道您只需提供remote: true即可通过ajax请求在rails中提交表单:

<%= form_for(@user, remote: true) do %>
  ...
<% end %>

现在:当表单提交时:而不是HTTP请求,它是一个ajax请求。

我想要做的是提交一个JS请求(ajax请求)不是针对整个表单,而是针对特定的字段元素,但它不起作用。具体来说:当用户在选择框中进行选择时,应启动ajax请求:

<%= form_for(@user) do %>

  <div class="field">
    <%= f.label :food_type_id %>
    <%= f.collection_select :food_type_id, FoodType.all, :id, :name, remote: true %>        
  </div>

  ...

<% end %>

我希望将AJAX请求发送到服务器,因为我在该字段上提供了remote: true选项。所以:每当用户做出选择时:ajax请求就会触发。然而:什么都没发生。

我错过了什么?我知道我可以自己完成所有操作:将事件监听器绑定到客户端的选择框,并在选择框更改时触发请求。但是:我认为remote: true可以为您处理ajax请求,因此我不需要进行任何自定义ajax请求构建。

1 个答案:

答案 0 :(得分:2)

Rails的内置表单帮助程序允许您对以下帮助程序使用remote: trueform_tagform_forlink_tobutton_to。将remote: true添加到表单内的单个字段将不起作用。见Working with Javascript in Rails

您需要将javascript函数绑定到food_type_id select:

$('select#user_food_type_id').change(function() {
  $.ajax({
     url: '/food_types.json', // you could be fancy and set this in a data attribute.
     success: function(response) {
       // update your form with the response from your ajax request
     }
  });
});