我有一个带有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))。
有没有办法反映类方法的类,还是必须在运行时动态生成该方法才能预先定义调用类?