2014-09-17 5 views
0

원시 SQL을 사용하지 않고도 새 관계를 지정하는 모델 객체 목록을 만들고 싶습니다.select 쿼리에서 새 관계로 activerecord 객체 만들기

가정하자 나는이 다음 모델 :

class MealCombination < ActiveRecord::Base 
    belongs_to :drink 
    belongs_to :food 
end 

class Food < ActiveRecord::Base 
    has_many :meal_combinations 
end 

class Drink < ActiveRecord::Base 
    has_many :meal_combinations 
end 

나는 현재 데이터베이스에 존재하지 않는 MealCombination 개체의 목록을 작성하고 싶습니다.

select distinct DRINK.id, FOOD.id from FOOD, DRINK where DRINK.alchohol_volume > 5 and FOOD.spice_factor > 45; 

이 선택에서 MealCombination 개체를 만들 수있는 가장 효율적인 방법은 무엇입니까 :

내 쿼리가 다음과 같이 보일 것 말?

원시 sql에서 반환 된 배열을 반복하면 비효율적 인 것처럼 보입니다. 개체를 데이터베이스에 유지하고 싶지 않습니다.

+0

식사 조합 목록이 있으며 데이터베이스에 어떤 것이 있는지 알기를 원하십니까? 당신이 원하는 것을 이해하지 못했습니다. –

+0

DB에서'food'와'drink'를 모두 선택하고 가능한 모든'meal_combinations'의리스트를 효율적으로 생성하기 위해 이들 ID를 사용하려고합니다. 그러나 당신은'meal_combination' 레코드를 유지하기를 원하지 않습니까? – DiegoSalazar

+0

예. 그게 디에고 말이 맞아. meal_combinations는 데이터베이스에없는 새로운 관계입니다. – Andy

답변

0

가장 쉬운 방법은 데이터베이스에서 원하는 검색어를 나타내는 "meal_combinations"라는보기를 만드는 것입니다. ActiveRecord는 뷰를 대부분 테이블로 취급해야하지만 뷰를 사용하는 모든 클래스 정의에는

def read_only? 
    true 
    end 

을 반드시 추가해야합니다. 많은 뷰를 갖는 데있어서 가장 큰 단점은 기본 테이블의 열을 변경하려는 경우 데이터베이스 마이그레이션을 관리하는 데 약간의 어려움이 있다는 것입니다.

+0

난 단지 당신의 의견을 발견했습니다. 고맙습니다, 좋은 일 이죠. – Andy

관련 문제