2012-10-03 16 views
1

Rails 2.3.5使用text_field的默認值時,避免表單參數中的Nil錯誤?

如果下面我使用默認會話值或(優先級)表單參數,有沒有辦法寫下面的代碼以避免零錯誤?

<%= f.text_field :deliver_to_addr, :size => 100, :maxlength => 100, :value => params[:request][:delivery_to_address] || session[:address] %> 

我工作圍繞這一問題通過把一個邏輯塊在控制器中拿出一個單變量保存應該怎麼選擇(如下圖),但有一個簡單的方法來解決這個問題,所以我每次我需要使用默認值(本例中爲session [:address])時,不需要代碼塊?

if !params[:request].blank? 
     if !params[:request][:delivery_to_address].blank? 
     @delivery_addr_to_select = params[:request][:delivery_to_address] 
     else 
     @delivery_addr_to_select = session[:address] 
     end 
    else 
     @delivery_addr_to_select = session[:address] 
    end 

<%= f.text_field :deliver_to_addr, :size => 100, :maxlength => 100, :value => @delivery_addr_to_select %> 

謝謝!

回答

3

可以在try - 方法使用的生成:

@delivery_addr_to_select = params[:request].try(:[], :delivery_to_address) || session[:address] 

這將嘗試:delivery_to_address調用[]散列法如果結果是nil將採取的session[:address]

0

你可以嘗試寶石andand幫助縮短邏輯

@delivery_addr_to_select = params[:request].andand[:delivery_to_address] || session[:address] 

這工作是否:request存在,因爲andand只會調用:delivery_to_address如果params[:request]不爲零。