2012-06-22 2 views
0

내 모델은 컨트롤러정렬 has_many 관계는 3

class Job < ActiveRecord::Base 
    belongs_to :client 
end 

class Client < ActiveRecord::Base 
    has_many :jobs 
end 

내가 정렬 작업으로 클라이언트를 얻을 싶어합니다. 내가 (순서없이) 할 경우

@client = Client.find(params[:id], :include => {:jobs => :status}) 

그것은 모든 괜찮습니다. 하지만 난 주문을 추가하는 경우 :

@client = Client.find(params[:id], :include => {:jobs => :status}, :order => 'job.level DESC') 

// : 순서는이 동적으로 (하지이 예에서) 설정 - 내가 알고 : has_many의 순서를.

결과는 단지 3 개의 행 (모든 작업. 레벨 1에 해당)입니다. 내가 SQL 쿼리를 기록하고 그것을 실행하고 결과는 괜찮지 만, 응용 프로그램에서 나는이 3 행을 가지고 있습니다. 작업을 정렬하는 올바른 방법은 무엇입니까? 감사합니다

답변

0

이 내가 원래 원했던 아니지만, 그것은 작동하므로이

@jobs = @client.jobs.find(:all, :order => sort_column + " " + sort_direction) 
0
당신은

class Job < ActiveRecord::Base 
    belongs_to :client, :order => 'level DESC' 
end 

OR 또한

class Client < ActiveRecord::Base 
    has_many :jobs, :order => 'level DESC' 
end 

의 작업 모델의 수준은 어떤 데이터 유형 모델 대신 컨트롤러에 직접 순서를 지정 시도 할 수

? 도움이 될 SQL 쿼리에 대한 로그를 게시 할 수 있다면. 또한 시도한 적이 있습니까? 게시 한 코드에 사용 된 단수 job.level 대신 시도했습니다.

:order => 'jobs.level' 

+0

답변입니다 그러나 주문 후 지정 url 매개 변수에 의존하는 경우 : 모델 doesnt't 도움말의 순서. "클라이언트"LEFT OUTER JOIN "작업"ON "작업". "clientid"= "클라이언트". "clientid"LEFT OUTER JOIN "상태"ON "상태"SQL : SELECT ... FROM " "jobstatus"WHERE "client". "clientid"= 2 AND "client". "clientid"IN (2) ORDER BY job.level – DominikM