0

名前付きスコープを使用すると、パラメーターを取るスコープを作成できましたが、パラメーターがあった場合.blank?は何もしませんでした。クラスメソッドで同じ結果を得るにはどうすればよいですか?

このようなモデルを考えると

class Product
  belongs_to :category

  def self.in_category(id)
    where('"category".id = ?', id) unless id.blank?
  end
end

Product.all.in_category("")は nil を返しますが、 と同じことをしたいですProduct.all

私の唯一の考えは、不必要なようなことを.in_categoryするように設定することですが、生成されたSQLを不必要なステートメントで混乱させたくありません。if..else..endelsewhere('"category".id = *')

4

1 に答える 1

2

次のように、パラメーターにデフォルト値を指定できます。

def self.in_category(id = nil) # Allows id to be blank by default
  if id.blank?
    all
  else
    where('"category".id = ?', id) 
  end
end

また、実際のカテゴリ オブジェクトをこのメソッドに渡すことを検討することもできますが、id を直接操作することはほとんど賢明ではありません。

def self.in_category(_category = nil) # Allows id to be blank by default
  if _category.blank?
    all
  else
    where(category: _category) 
  end
end
于 2013-10-05T13:32:25.607 に答える