2012-10-18 52 views
1

我有一個Attendance模型,它有兩個Boolean數據庫屬性(:late:absent),它們都有:default => false兩個布爾數據庫屬性的導軌單選按鈕

我想製作一個只有2個單選按鈕的窗體。一個爲遲,一個爲缺席。當然,用戶只能選擇其中的一個。

我試過這麼多的變化,但不能得到任何工作。

任何人都可以借我一把嗎?我知道我可以很容易地做集合選擇,但單選按鈕將有助於用戶體驗。另外,由於一系列原因,我需要保留db數據模式...

感謝百萬!!!

+0

你是說你想讓用戶能夠選擇兩者(即將兩者設置爲true)? – veritas1

回答

5

我不知道任何扶助助手將支持所需的福開箱即用。我也質疑可用性,因爲如果模型既不遲到也不缺失,但用戶無法取消選擇單選按鈕,但意外點擊。除此之外,我會使用radio_button_tag並提供兩個選項,然後在您的控制器中相應地更新參數。這裏有一個簡單的例子:

<%= form_tag('/your/path') do %> 
    <%= radio_button_tag :status, 'late' %> 
    <%= label_tag :status_late, 'Late' %> 
    <%= radio_button_tag :status, 'absent' %> 
    <%= label_tag :status_absent, 'Absent' %> 
    <%= submit_tag :submit %> 
<% end %> 

當然,你有你需要的任何其他字段,然後在您的控制器像作者:

def create 
    case params[:status] 
    when 'late' 
    params[:model_name][:late] = true 
    when 'absent' 
    params[:model_name][:absent] = true 
    end 

    ModelName.new(params[:model_name]) 
end 

東西沿着這些線路應該做的伎倆。

+0

感謝您的迴應!我認爲這是一個好答案。一般的想法是,無論是工人缺席還是遲到。如果用戶被無意中標記爲上述任何一個,模型可以被刪除。 –

1
@options = ["Late", "Absent"] 
@selected_options = "" 

<% @options.each do |option| %> 
    <%= radio_button_tag 'attendance_radio', option, option == @selected_option %> <%= label_tag 'name', option %> <br /> 
<% end %> 

如果你想在表單中值比實際選擇的值(晚期,無)以外的內容存儲在attendance_radio

選擇的無線電那麼你可以弄亂第二個參數來保存boolean而不是

+0

^這不起作用的原因有很多:1)它創建了兩個無關的單選按鈕 - 即用戶可以選擇兩個選項,2)提交的值分別遲到和不存在,而不是真正的/ false,如問題所示。 –

+0

編輯答案。對不起,我在飛行中回答。 –

+0

非常感謝編輯回覆!我會鼓勵你的建議,並嘗試使其工作。 –

0

在上面的第一個答案中,編輯這樣的參數不是最佳做法。我將通過爲布爾值創建隱藏字段來處理此問題,並根據使用Javascript選擇哪個單選按鈕來相應地設置它們的值。

我沒有足夠的知名度來評論,所以創建了一個新的答案。

(if $('#id_of_radio_button').is(:checked)) { 
    $('#id_of_hidden_tag:hidden').val(true); 
} 

然後你可以像通常那樣將它作爲一個參數傳遞,而沒有控制器中所有額外的重量。