2014-05-13 2 views
1

레일에서 SQL 쿼리를 작성할 때 select 메서드를 사용하는 방법을 잘 모르겠습니다. 나는 선택, 그러나 ... 등등 어디 절, 주문 절, 부울 조건에 매우 잘 알고 나를 여기에 약간의 혼란이있는 예입니다 : 정확히 여기서 뭘 선택 무엇레일 선택 방법 이해

>> b = BillableWeek.select("mon_hrs + tues_hrs as two_day_total").first 

? 그리고 그것은 일반적으로 기능은 무엇입니까?

위의 경우 필자는 BillableWeek 개체에서 열의 mon_hrs & tues_hrs를 선택하여 추가 한 후 그 결과를 two_day_total에 저장한다고 추측합니다.

two_day_total도 열입니까?

답변

1

select ActiveReocrd 클래스의 메서드는 db에서 레코드를 가져 오는 데 사용되는 SELECT 문을 재정의합니다. 당신이 준 예는 쿼리를 실행합니다 : 그것은 단지 하나의 열 (실제로 테이블에 존재하지 않는) 반환합니다

SELECT mon_hrs + tues_hrs as two_day_total FROM billable_weeks LIMIT 1 

, 두 개의 실제 열 mon_hrstues_hrs에 저장 vlueas의 합계 인 two_day_total을했다.

0

::select 다른 많은 쿼리를 수행 할 수 있습니다. 하지만 당신이하고있는 일은 ActiveRecord에서 호출 할 수있는 별칭 메서드를 만드는 것이라고 생각합니다. 다음은 documentation의 예입니다. 우리는 지속적으로 추가하고 메서드 호출과 열을 제거하는 경우

#If an alias was specified, it will be accessible from the resulting objects: 

Model.select('field AS field_one').first.field_one 
# => "value" 

이 영구적으로, 어떤 의미에서, 종류의 무의미 마이그레이션을 만들 것 그 이후 데이터베이스에 실제 열을 추가하지 않습니다. 간단히 말해서 두 값을 함께 추가하고 별칭을 지정하면 쿼리가 열이 아닌 값을 반환하는 바로 가기가됩니다.