1

导轨 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 %>

谢谢!

4

2 回答 2

3

您可以使用内置try方法:

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

这将尝试调用[]hash 方法,:delivery_to_address如果结果是nil它将采用session[:address].

于 2012-10-03T21:40:13.047 回答
0

您可以尝试 gem andand来帮助将逻辑缩短到

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

无论是否:request存在,这都有效,因为只有在不为零andand时才会调用。:delivery_to_addressparams[:request]

于 2012-10-03T21:09:15.717 回答