2016-03-06 32 views
0

我想在控制器中有一個if else語句來執行某些操作,如果被選中,並且其他東西沒有被選中。check_box_tag沒有通過任何參數,如果沒有選中

<%= check_box_tag "apply[]", 1, false %> 

如果被選中,在表單提交"apply"=>["1"]作爲參數傳遞,如果不檢查的話什麼都不發。

如果沒有選中,我可以將"apply"=>["0"]作爲參數傳遞嗎?

回答

0

導軌導向器具有一個警告框,這個特殊情況:

http://guides.rubyonrails.org/form_helpers.html

陣列參數不與check_box幫手發揮出色。按照 的HTML規範取消選中複選框提交沒有任何價值。

但是,對於複選框,始終提交 值通常很方便。 check_box助手通過創建一個隱藏的 輸入具有相同的名稱來僞造。如果取消選中該複選框,則僅提交隱藏的 輸入,如果選中,則提交這兩個輸入,但 複選框提交的值優先。當使用數組參數 和數組參數時,這個重複的提交會混淆Rails ,因爲重複的輸入名稱是它決定何時開始新的 數組元素的方式。最好使用check_box_tag或使用散列值而不是數組。

+0

這條線讓我感到困惑'最好是使用check_box_tag或者使用散列而不是數組。我覺得它說它最好使用'check_box_tag',因爲它會爲checked和un checked發送一個param。但它不... – Rob

0

的確實does not use the hidden field所以它不會發送任何東西的情況下沒有選中該複選框(不像check_box幫手,這不過是還沒有在一個陣列特性參數的情況下非常有用,如邁耶以上說明)。

如果正在嘗試使用複選框以類似的方式,如this SO question(即發送的ID例如用戶選擇的陣列),該簡單解決方案可能是在控制器中的空PARAM反應。東西的方式:

params[:apply] ||= [] 

如果,另一方面,你想使用複選框爲有序排列,其中每個值將其固定位置的陣列來確定,無論是真的還是假的,(即如果你想在apply param:[0, 1, 0, 0, 1]中得到這樣的東西),這是行不通的。您必須選擇不同的方法,例如使用帶有散列參數而不是數組的複選框。