我有一个带有Content
模型的 Rails 应用程序。内容模型有许多STI子模型,例如Announcement
、Story
、FAQ
等。我需要能够通过Sunspot为每个子独立和作为一个组查询 Solr。
这是内容模型中太阳黑子搜索的当前实现。它为隐藏和发布设置默认值,因此 Solr 仅返回活动内容并接受 ablock
以允许更远的搜索参数:
def self.search_for(&blk)
search = Sunspot.new_search(Content)
search.build(&blk)
search.build do
with :hidden, false
with(:published_at).less_than Time.now
end
search.execute
search
end
此方法非常适用于 Content,并将返回 Content 和所有子模型的结果。我对方法的名称并不特别兴奋search_for
,但想不出更好的方法。
我需要能够按子模型搜索,即Announcement.search_for()
. 我不想将此方法粘贴到 ~10 个子模型中,因为默认值将在不久的将来发生变化。我想要的是让每个子模型都继承这个方法,但是搜索孩子的类,而不是Content
(例如Announcement
搜索Sunspot.new_search(Announcement)
)。
有没有办法反映类方法的类,还是必须在运行时动态生成该方法才能预先定义调用类?