개발중인 Rails 애플리케이션에는 Review
및 Interview
의 두 가지 모델이 있습니다. 둘 다 본질적으로 기사이지만 특성과 행동면에서 다릅니다.2 개의 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) }
과 같은 것을 사용할 수 있으며 동일한 쿼리가 두 모델에서 실행되어 여러 결과를 얻을 수 있습니다 (날짜별로 정렬되지는 않지만 실제로 두 개의 서로 다른 쿼리에서 온 리뷰와 인터뷰가 함께 정리됩니다).
이 접근 방식은 효과가있는 것으로 보이지만 몇 가지 중요한 단점도 있습니다.
큰 결과는 정렬 결과를 올바르게 정렬하려면 쿼리 후 수동으로 구현해야한다는 것입니다.
내가 만나는 문제를 해결하기 위해 내 자신의 방법을 구현하는 데 아무런 문제가 없지만, 레일에서 이것을 달성하기 위해 표준 방법이 있는지 궁금합니다.
같은 테이블에서 두 모델 모두에 필요한 모든 열을 가져야합니까? –
동일한 테이블에 필요하면 예 및 유효성 검사가 클래스를 기반으로합니다. – jamesy829