2012-09-15 26 views
1

我有一個Rails應用程序Content模型。內容模型有許多STI兒童模型,例如Announcement,,FAQ等。我需要能夠通過Sunspot爲每個孩子獨立和作爲一組查詢Solr。太陽黑子搜索Rails的單表繼承

這是目前內容模型中太陽黑子搜索的實現。它設置默認爲隱藏,並對外公佈,只有活動的內容是由Solr的返回和接受block允許更遠搜索PARAMS:

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 

這種方法完全適用於內容,並返回內容結果,所有的孩子模型。我對這個方法的名字search_for沒有特別的興趣,但想不出更好的辦法。

我需要能夠通過兒童模型進行搜索,即Announcement.search_for()。我不希望將這種方法粘貼到~10兒童模型中,因爲默認值將在不久的將來發生變化。我想要的是每個子模型都繼承了此方法,但是搜索子類,而不是Content(例如,Announcement將通過Sunspot.new_search(Announcement)進行搜索)。

是否有方法可以反映類方法的類,或者是否必須在運行時動態生成此方法以預定義調用類?

回答

0

很簡單,只需傳遞實例類型而不是Content。更改功能的第一行:

search = Sunspot.new_search(self) 

凡自將持有Content如果通過Content.search_forAnnouncement如果Announcement.search_for調用調用的方法。而已!