我正在開發的Rails應用程序有兩個模型:Review
和Interview
。它們本質上都是文章,但它們的屬性和行爲卻有所不同。將兩個ActiveRecord模型合併爲一個
某些應用程序的頁面需要一起顯示評論和訪談,就好像它們來自同一模型一樣。這意味着我需要將它們放到一個模型中,然後將這個模型用作「代理」。
我通過實施Article
模型用下面的代碼實現了基本結果:
class Article
MODELS = [Review, Interview]
def self.fetch(&block)
block = Proc.new { all } unless block_given?
results = []
MODELS.each do |model|
suppress(StandardError) do
results.push(*model.class_eval(&block))
end
end
results
end
end
這爲我提供的基本功能,我需要。我現在可以使用類似於Article.fetch { where("created_at >= ?", 10.days.ago.to_date) }
的東西,同樣的查詢將在兩個模型上運行,給我一組結果(不按日期排序,但實際上評論和訪談分塊在一起,因爲它們來自兩個不同的查詢)。
這種方法似乎可行,但它也有一些重要的缺點。
一個重要的問題是,如果您希望將結果正確排序,則必須在查詢後手動執行任何類型的排序。
我沒有遇到實施我自己的方法來解決我遇到的問題,但我想知道是否有更多的標準方式來實現這個在Rails中。
我是否需要在同一張桌子上擁有兩個模型所需的所有列? –
如果你需要他們在同一張桌子上是的,驗證將基於類 – jamesy829