2014-09-13 71 views
0

目標是通過特定的鏈接傳遞特定的布爾值(true或false)。Rails 4:在新動作上傳遞布爾值

我已經試過:

<%= link_to "new test", new_test_path(:crazy => true) %> 

網址:/測試/新瘋狂=真

視圖

<div class="field"> 
    <%= f.radio_button :crazy, true %> True 
    <%= f.radio_button :crazy, false %> False 
</div> 

static_pages_controller

def home 
    @test = Test.new 
    ... 
end 

但是當我單擊該鏈接時沒有選中單選按鈕。

+0

您需要在控制器中將該屬性的值設置爲true。如果它是'true',則第一個按鈕將被檢查。如果它是'假',第二個按鈕將被檢查。這可能是'無'。 – Swards 2014-09-13 14:58:56

+0

你可以寫一個答案,看看如何實際做到這一點?我試着用[:crazy =>'true']在test_params中設置值,但它仍然不起作用。 – 2014-09-13 15:12:39

回答

1

我們無法從查詢字符串中將值作爲布爾值。您需要做好一切準備或者只是像做:

params[:crazy] == 'true' 

但是,字符串比較總是昂貴的每串的長度。所以,你應該儘量減少它。您可以檢查由Ismriv給出的集中式方法解決方案。


我想這將是最適合你:

您的鏈接:

<%= link_to "new test", new_test_path(:crazy => '1') %> 

new行動:

def new 
    @test = Test.new(:crazy => (params[:crazy] == '1')) 
    ... 
end 

您的收音機:

<div class="field"> 
    <%= f.radio_button :crazy, true %> True 
    <%= f.radio_button :crazy, false %> False 
</div> 
0

radio_button方法(http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-radio_button)不會根據請求參數自動檢查單選按鈕。

<%= f.radio_button '', :crazy, 'true', { checked: params[:crazy] == 'true' } %> True 
<%= f.radio_button '', :crazy, 'false', { checked: params[:crazy] == 'false' } %> False 

請注意rails中的object_name/method的區別,它根據約定生成名爲「object_name [method]」的參數。如果你真的希望你的參數只被命名爲「瘋狂」,請將object_name留空。