1

レール 2.3.5

以下でデフォルトのセッション値または (優先度付きで) フォーム パラメータを使用している場合、nil エラーを回避するために以下のコードを記述する方法はありますか?

<%= f.text_field :deliver_to_addr, :size => 100, :maxlength => 100, :value => params[:request][:delivery_to_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]

これは、[]結果が.:delivery_to_addressnilsession[:address]

于 2012-10-03T21:40:13.047 に答える
0

ロジックを次のように短縮するために、gem andandを試すことができます。

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

:requestこれは、が存在するかどうかに関係なく機能します。これは、が nil でない場合andandにのみ呼び出されるためです。:delivery_to_addressparams[:request]

于 2012-10-03T21:09:15.717 に答える