为未选中的复选框发送'nil' - UJS,Rails 4

时间:2015-09-14 00:42:09

标签: javascript jquery ruby-on-rails ajax checkbox

我正在尝试update_attributes在HTML表格中使用check_box表单标记的订单:

...
<td>
  <%= form_for order, url: toggle_shipped_state_path(order.id), remote: true do |f| %>
    <% if order.shipped_or_delivered.nil? %> #<= items that weren't shipped
      <%= f.check_box :shipped_or_delivered, class: 'toggle-shipped' %>
    <% else %>
      <%= f.check_box :shipped_or_delivered, class: 'toggle-shipped', checked: true %>
    <% end %>
    <%= f.submit 'Shipped' %>
  <% end  %>
</td>
...  

在我看来,我正在加载my-sales.js,其中包含:

jQuery.fn.submitOnCheck = function() {

  this.find('input[type=submit]').remove();
  this.find('input[type=checkbox]').click(function() {
    $(this).parent('form').submit();
    $(this).closest('tr').toggleClass('success');
  });
  return this;
}

$('table').find('input[checked]').each(function(){
    if ($(this).is(':checked')) {
      $(this).closest('tr').addClass('success');
    }
  });

$('form.edit_order').submitOnCheck();

我的toggle_shipped_state操作是:

def toggle_shipped_state
  @order = Order.find(params[:order_id])
  @order.update_attributes(shipped_or_delivered: Time.now)
end

选中此框可以正常工作,@order的{​​{1}}属性会正确更新。但是,取消选中该复选框不会执行任何操作。如何确保取消选中该复选框会创建一个AJAX调用,以使用shipped_and_delivered更新相应订单的shipped_and_delivered属性?

1 个答案:

答案 0 :(得分:1)

与往常一样,我忽略了我设计中最明显的问题。控制器操作是一个单一的小马,它只会用min-width: 400px; 更新shipped_or_delivered属性。由于复选框的值为Time.now的{​​{1}}或1的{​​{1}},因此控制器操作需要适应这两种情况。所以而不是:

true

我应该做的:

0