2012-08-28 101 views
3

我正在使用Rails 3.2。我有一個搜索表單,下面有單選按鈕。它基於哪個單選按鈕被選中進行搜索。目前我有這在我的觀點:如何在提交表單後設置單選按鈕的值?

= radio_button_tag(:ad_type, "free") 
    = label_tag(:ad_type_free, "free") 
    = radio_button_tag(:ad_type, "paid") 
    = label_tag(:ad_type_paid, "paid") 
    = radio_button_tag(:ad_type, "featured") 
    = label_tag(:ad_type_featured, "featured") 

所以我的問題是這樣,我怎麼設置默認的單選按鈕來選擇?我曾嘗試使用radio_button_tag(:ad_type, "free", :checked => true),但提交表單後,它始終選擇該單選按鈕。我想要的是根據以前的請求選擇值。我應該從url params中獲得值嗎?如果是這樣,我如何設置初始默認值(當沒有以前的搜索時)?非常感謝。

更新

我創建了一個輔助方法ad_type_selected?

def ad_type_selected?(ad_type) 
    selected_ad_type = params[:ad_type] || "free" 
    (selected_ad_type == ad_type) ? true : false 
    end 

而且我有這個在我看來:

= radio_button_tag(:ad_type, "free", :checked => ad_type_selected?("free")) 

然而,單選按鈕仍然沒有得到選擇。檢查日誌時,我發現第一次調用助手時返回true,其他次數爲false,這正是我想要的。但問題是它仍然不選擇單選按鈕。如果我檢查輸入標籤,我只能看到checked屬性設置爲「checked」。

回答

2

顯然,加入了checked屬性的所有單選按鈕使最後單選按鈕始終被選中。所以我做的只是添加一個檢查屬性,如果參數匹配單選按鈕。

所以對於我的例子,我只是用一個助手來生成諸如適當的單選按鈕,以便:

def ad_type_radio_button(ad_type) 
    selected_ad_type = params[:ad_type] || "free" 

    if selected_ad_type == ad_type 
     radio_button_tag(:ad_type, ad_type, :checked => true) 
    else 
     radio_button_tag(:ad_type, ad_type) 
    end 
    end 

而且有這個在我看來:

= ad_type_radio_button("free") 

我知道這是遠離優雅,但它現在行爲正確。

0

如果params [:ad_type]爲零,則此片段將設置爲false。否則,如果params [:ad_type]設置爲true,它將設置爲true。

radio_button_tag(:ad_type, "free", :checked => (params[:ad_type] == nil ? false : params[:ad_type])) 

以防萬一,因爲如果/然後/別的上面使用,它會你沒見過的簡寫:

test-expression ? if_true_expression : if_false_expression 
+0

但PARAMS [:AD_TYPE]包含一個字符串,那麼我應該使用params [:ad_type] ==「free」?真假 ?併爲所有單選按鈕重複此操作? – maru

+0

這對我來說是正確的...玩它,看看它是如何發展。 – niiru

+1

或者你可以做些像params [:ad_type] .present?如果它不是null或false,它將返回true – basgys

0

根據docs,checked不是一個選項哈希參數,它只是一個布爾值。

這(至少在導軌4)不工作:

= radio_button_tag(:ad_type, "free", :checked => ad_type_selected?("free")) 

它應該是:

= radio_button_tag(:ad_type, "free", ad_type_selected?("free")) 
3

我挖掘墳墓,但我只是碰到這種來了。

<label class='checkbox-inline'> 
    <%= radio_button_tag :option, :user, true %> 
    Username 
</label> 
<label class='checkbox-inline'> 
    <%= radio_button_tag :option, :email, params[:option] == 'email' ? true : false %> 
    Email 
</label> 
<label class='checkbox-inline'> 
    <%= radio_button_tag :option, :name, params[:option] == 'name' ? true : false %> 
    Full Name 
</label> 

因此......這會默認設置第一個按鈕(並且總是),但是如果選擇了其他參數,它們將成爲真實。單選按鈕將始終爲您挑選的最後true按鈕,所以只要你第一次把你的默認選項列表中,設置爲true,其餘的設置爲:

params[:name_of_your_buttons] == 'button_value' ? true : false 
+0

'params [:option] =='name'? true:false'相當於'params [:option] =='name'' – 7stud