2011-11-23 128 views
1

我張貼另一個問題關於這個同一段代碼抱歉,但我這樣一個新手到軌它的痛苦。我的問題是,我希望在數據庫中存在默認值時選擇第三個單選按鈕。換句話說,我有三個按鈕「真」,「假」和「任一」。如果沒有選擇任何東西,或者如果用戶選擇了「任一」按鈕,我希望顯示該選擇。目前,如果用戶選擇「真」或「假」,那麼該選擇將被正確反映並如預期那樣。這只是第三個被選中的選項,當表單被保存或再次提交時沒有被反映出來。這裏是我的代碼:遇到的麻煩:檢查radio_button - 軌道

<div class="new-partner-form"> 
<%= form_for [:admin, matching_profile.partner, matching_profile], :html => {:id => "edit_profile", :multipart => true} do |f| %> 
    <div class="rounded-block semi-wide clear"> 
    <h4>Military Service</h4> 
    <%= f.radio_button :served_in_us_army, false %> 
    <%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, true %> 
    <%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, " ", { :checked => (:served_in_us_army.nil? or :served_in_us_army.blank? ? true : false) } %> 
    <%= label :served_in_us_army, 'Either', {:style => 'display:inline'} %> 
    <%= f.error_message_on :served_in_us_army %> 
    </div> 

編輯:我要指出,也試過了:沒有大括號「選中」選項。仍然沒有運氣。

不知道這是最好的解決辦法,但這裏是我是如何解決這個問題(我需要的字段值而不是列名):

<div class="rounded-block semi-wide clear"> 
    <h4>Military Service</h4> 
    <%= f.radio_button :served_in_us_army, false %> 
    <%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, true %> 
    <%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %> 
    <%= f.radio_button :served_in_us_army, " ", :checked => matching_profile.served_in_us_army.nil? %> 
    <%= label :served_in_us_army, "Either", {:style => 'display:inline'} %> 
    <%= f.error_message_on :served_in_us_army %> 
</div> 

回答

1

我建議你不這樣做風景。這是商業邏輯。

試着在控制器中做到這一點,或者在模型中做得更好。

在這種情況下,你可能要爲新的控制器和(特別是)的編輯操作,也許創建該信息的實例變量。您可以從數據庫中選擇值,添加手動選項,設置if-then,然後正確設置對象。

最重要的是(總是)是嘗試在模型級解決這個問題。您可以使用模型方法來查看軍事服務的現有值,然後返回有關信息 - 即使是布爾值很高的真/假值。只要確保準備做.save的前屬性(S)正確(以匹配DB)

+0

恐怕我還是有點雲裏霧裏這裏。假設我將方法添加到返回值爲:served_in_us_army的模型(大概我可以做一些類似'attr_accessor:served_in_us_army'的東西)。我是否仍然需要在視圖中檢查以查看該值,並根據該值確定是否檢查該按鈕? – Ramy