0

検索フォームで使用する次のコードがあります。スコープ メソッドを by_title でチェーンできるようにしたいのですが、その方法がわかりません。ただ行うのではなく、メソッドとして by_title を使用したい:

# Arel helpers
  class << self
    def by_city(city)
      where(['city_id = ?', city])
    end
    def by_title(title)
      where('title LIKE ?', "%#{title}%")
    end
  end


  def self.search(search_params)
    experiences = scoped
    experiences.self.by_title(search_params[:title]) if search_params[:title]
  end
4

2 に答える 2

2

このようにスコープで遊んでみませんか:

scope :by_title, lambda { |title| where('title LIKE ?', "%#{title}%") }
scope :by_city,  lambda { |city|  where('city_id = ?', city) }
于 2013-01-04T22:42:57.550 に答える
1

それを削除するだけselfでうまくいくはずです:

experiences = scoped
experiences.by_title(search_params[:title]) if search_params[:title]

このscopedメソッドは、他のスコープ/クラス メソッドと連鎖できる匿名スコープを返します。

于 2013-01-05T01:35:18.100 に答える