2011-01-12 2 views
0

이 쿼리가Ruby on Rails에서 SQL로 결합 된 결과를 얻는 방법은 무엇입니까?

Product.find_by_sql("select * from products INNER JOIN order_entries ... ") 

인 경우

OrderEntry.find_by_sql("select * from products INNER JOIN order_entries ... ") 

가 된 OrderEntry 객체를 반환하면서 다음 개체를 반환, 제품의 객체가 될 것으로 보인다. 결합 된 결과를 반환 할 수있는 방법이 있습니까? 그 이유는 제품의 한 필드뿐만 아니라 최종 결합 결과에서 OrderEntry의 한 필드가 필요하기 때문입니다. 감사.

답변

3

세부 정보의 수준을 정확히 알 수는 없지만 일반적으로이 방법으로 조인을 실행해야하는 경우 일반적으로 결과 개체에서 조인 된 필드를 직접 참조 할 수 있습니다.

customer = Customer.first 
=> #<Customer id:1 ...> 
customer.date 
=> NoMethod Error (this is a Reservation method) 

하지만 ...

customer = Customer.find_by_sql("select * FROM customers INNER JOIN reservations ON customers.id = reservations.customer_id").first 
=> #<Customer id:1 ...> #looks the same, but isn't 
customer.date 
=> "2010-12-24" 

왜, 나는 아무 생각이 없지만, 개체가 조인 된 필드에 응답 : 예를 들어, 프로젝트에서 고객은 여러 예약을 할 수있는 곳. 나는 일반적인 객체와 결합 된 필드가있는 객체를 구별하는 방법을 알아 내려고 잠시 동안 찾았지만 알아 내지 못했습니다. 당신이 열 이름을 지정 (그들이 모호하지 않은) 경우

+0

답변은 정말 나를 놀라게합니다. 나는 이런 일이 가능하다는 것을 몰랐다. +1,하지만 그가 일대일 관계를 가지고 있기 때문에 그것은 @ 動靜 能量에 도움이되지 않는 것처럼 보입니다. – klew

+0

고객이 많은 예약을 가지고 있습니다. 내가 가입 할 때 나는 동일한 고객 객체의 여러 사본을 얻는다. (왜냐하면 그것들은 customers.id에 의해 GROUPED가 아니기 때문이다.) 비록 나의 설치가 특이 할 수도있다. – Nuby

1

가 직접 속성을 검색 할 수 있습니다 ... 생각 & 응답,하지만 늦었에서 간결 죄송합니다 :

sql = "select products.name, order_entries.description \ 
    FROM products INNER JOIN order_entries ON products.id=order_entries.product_id" 
result_set = Product.find_by_sql(sql) 

이것은 배열을 반환 선택한 열만있는 개체 연결을 거치지 않고도 열 이름을 사용할 수 있습니다.

result = result_set.first 
result.name # "Widget" 
result.description # "Best seller!" 
관련 문제