search do
Sunspotブロックの共通コードを、複数の場所から呼び出せるメソッドにリファクタリングするにはどうすればよいですか? これは Sunspot 固有の問題というよりも、おそらく Ruby のメタプログラミングに関する問題だと思いますが、ここまでです。
次のように黒点を使用するモデルがあります。
class Book
def self.basic_search(params)
search do
# boilerplate...
facet :category
paginate page: params[:p], per_page: APP_CONFIG[:results_per_page]
# bespoke basic_search search code goes here
end
end
def self.curated_search(params)
search do
# boilerplate...
facet :category
paginate page: params[:p], per_page: APP_CONFIG[:results_per_page]
# bespoke curated_search code goes here
end
end
end
次に、次のようにコードをリファクタリングしようとします。
class Book
def self.basic_search(params)
search do
boilerplate params
# bespoke basic_search search code goes here
end
end
def self.curated_search(params)
search do
boilerplate params
# bespoke curated_search code goes here
end
end
def self.boilerplate(params)
facet :category
paginate page: params[:p], per_page: APP_CONFIG[:results_per_page]
end
end
ボイラープレート メソッドは Book のクラス メソッドとして定義されているため、当然のことながら、次のようになります。
undefined method 'boilerplate' for #<Sunspot::DSL::Search:0x007f92b4177a98
の使用instance_eval
が必要だと思われますが、Ruby を初めて使用するので、それを適用する方法がよくわかりません。