4

これは何よりもスタイルの問題です。

クエリを作成するとき、クエリの結果が空白かどうかを常にチェックしていることに気付きます。

元。

def some_action
  @product = Product.where(:name => params[:name]).first
end

name = params[:name] の製品がない場合、nil 値が返されて問題が発生します。

私はそれからこのようなものを書いています

def some_action
  product = Product.where(:name -> params[:name])
  @product = product if !product.blank?
end

nil と空白の値をより簡潔に処理する方法はありますか? 物事が他の関係に依存している場合、これはより頭痛の種になります

元。

def some_action
  @order = Order.where(:id => params[:id]).first
  # if order doesn't exist, I get a nil value, and I'll get an error in my app
  if !@order.nil?
    @products_on_sale = @order.products.where(:on_sale => true).all
  end
end

基本的に、nil、空白、および潜在的に壊れているインスタンス変数をより効率的に処理することをまだ学んでいないことはありますか?

ありがとう

4

2 に答える 2

3

スタイルに関連している場合は、RailsのObject#tryメソッドを調べるか、 andandなどを検討します。

あなたの例を使って、試してみてください:

def some_action
  @order = Order.where(:id => params[:id]).first
  @products_on_sale = @order.try(:where, {:onsale => true}).try(:all)
end

またはandandを使用する:

def some_action
  @order = Order.where(:id => params[:id]).first
  @products_on_sale = @order.andand.where(:onsale => true).andand.all
end
于 2013-01-10T00:50:42.987 に答える
2

コントローラーで「何も壊さない」ことを回避したとしても、ビューにはその問題があります。ifビューに複数のを含めるよりも、コントローラーに1つのステートメントを入れて、ビューを「見つからない」ページにリダイレクトする方がはるかに簡単ifです。

または、これを追加することもできます

protected
  def rescue_not_found
  render :template => 'application/not_found', :status => :not_found
end

あなたにapplication_controller。詳細はこちら:https ://ariejan.net/2011/10/14/rails-3-customized-exception-handling

于 2013-01-10T00:50:04.220 に答える