2015-09-14 23 views
0

我試圖update_attributes使用HTML表內check_box表單標籤的訂單:發送「零」的選中複選框 - UJS,軌道4,5

... 
<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 

檢查框可以正常工作,@ordershipped_and_delivered屬性正確更新。但是,取消選中該複選框不會執行任何操作。我如何確保取消選中該複選框會創建一個AJAX調用以更新nil的相應訂單的shipped_and_delivered屬性?

回答

1

一如往常,我忽略了我設計中最明顯的問題。控制器動作是一個小把戲,它只會更新shipped_or_delivered屬性Time.now。由於複選框的值爲1(對於true0對於false),控制器操作需要適應兩種情況。因此,而不是:

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

我應該做的:

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