조인 쿼리를 사용하여 쿼리와 함께 다른 테이블의 특성을 가져옵니다. 여기조인되지 않은 조인 된 테이블의 데이터
city = City.first(:select => "cities.*, states.name as state_name, states.time as state_time"
:joins => "LEFT JOIN states on cities.state_id = states.id",
:conditions => ["states.name = ?", params[:state]])
는 문제는 내가 city.state_time
같은 조인 된 테이블에서 값을 얻을 때, 나는 (어떤 타입 캐스팅이이 필드 레일에 의해 수행되지 않습니다) 대신에 시간 객체의 2010-11-12 05:00:00
같은 문자열을 얻을 것입니다. City 모델을 호출 할 때부터 의미가 있으며 typecasting 시간 열에 사용되는 메서드는 State 모델에 포함됩니다. 내가 명시 적으로 이렇게 시간을 구문 분석해야하며 시간대 문제와도 싸워야 할 것입니다. (레일즈가 Time 객체를 제공하는 동안 몇 가지 커스터마이징을하기 때문에 나는이 칼럼들을 위해 이것을해야 할 것이다). 조인을 수행하는 동안 열을 State에 연결하는 방법이 있습니까? 내가 생각한 한 가지 방법은 이것과 같습니다.
state = State.new(:name => city.state_name, :time => city.state_time)
및 state.name
및 state.time
를 사용합니다. 더 좋은 방법이 있습니까?
원래 문제에 가입, 나는 직면하고 레일이 할 것입니다 때문에 쿼리를 반환하지 않습니다 문자열을 객체에 타이 캐스팅 (typecasting)하여 많은 것을 저장하고 조인 된 테이블의 경우이 모든 것을 기억하고 내 모델에서 수행해야합니다. 그래서'State' 모델 객체를 초기화하는 것입니다.하지만'State.new'가 설정 파일에 정의 된 시간대에서 Time을 취하고 있기 때문에 작동하지 않습니다. – rubyprince
헤이, 나는 나의 대답을 완전히 편집했다. 왜 LEFT JOIN을 사용하셨습니까? – sled
ok..thanks..got it .. 나는 기존의 코드에서 작업하고 있었고 왜 왼쪽 join이 사용되었는지 확신 할 수는 없지만 inner join으로 충분할 것이라고 생각합니다 .BTW Rails 2에서 동등한 것을 찾으려고합니다. 이 작동합니다. 나는 질문을 가지고있다 .'include'는'a.state'를 호출하는 동안 또 다른 sql 쿼리를 실행하지 못하게 할 것입니다. 나는 정상적인 경우 질의'SELECT *를 상태 id = # {a.state_id}'에서 발동 할 것인가? – rubyprince