Rails 2.3.5
如果我在下面使用默认会话值或(有优先级)表单参数,有没有办法编写下面的代码以避免出现错误?
<%= 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 %>
谢谢!
答案 0 :(得分:3)
您可以使用try
中的构建方法:
@delivery_addr_to_select = params[:request].try(:[], :delivery_to_address) || session[:address]
如果结果为[]
,则会尝试使用:delivery_to_address
调用nil
哈希方法session[:address]
。
答案 1 :(得分:0)
您可以尝试使用gem andand来缩短逻辑
@delivery_addr_to_select = params[:request].andand[:delivery_to_address] || session[:address]
无论:request
是否存在,此方法都有效,因为如果andand
不为零,:delivery_to_address
只会调用params[:request]
。