2014-01-29 3 views
1

세 개의 테이블이 있습니다. 그 중 하나는 다른 두 테이블 간의 조인 테이블입니다.레일 - 조인 테이블을 통해 쉼표로 구분 된 목록

  1. 채용 : 아이디
  2. 카운티 : ID
  3. Countyizations : job_ib, 나는 특정 작업과 연관이 카운티의 목록을 생성 할

을 county_id. 나는 다음과 같은 것을 사용하려고합니다 :

<%= @counties.map { |county| county.id }.join(", ") %> 

그러나 분명히 countyizations 테이블을 사용하고 있지 않습니다. 위의 코드를 어떻게 변경하여 필요한 것을 성취 할 수 있습니까? 또한 카운티 목록을 알파벳 순서대로 ASC 순서로 나열하고 싶습니다.

감사합니다.

P.

내 모델에서 테이블을 연결하는 방법을 추가해야한다고 가정합니다.

  1. 채용 : has_many : countyizations & has_many : 카운티 : countyizations
  2. 카운티 : has_many =>를 통해 countyizations & has_many : 작업 : countyizations
  3. Counyizations : belongs_to : 카운티 & =>를 통해 belongs_to : 주어진 job.id에 대한 작업
+0

belongs_to association decalred가있는 경우 jobs.county를 사용하여 카운티를 얻을 수 있습니다. 예상되는 결과물이 무엇인지 설명하십시오. –

답변

1

이이 반환 사용할 수있는 모든 주어진 작업에 의해 필터링 된 counties.

<%= @counties.order('name asc').includes(:jobs).where('jobs.id = ?', job.id) %> 

이 귀하의 요구 사항에 job.id을 기반으로 교체 할 컨트롤러에 @job 인스턴스 변수를 설정할 수 있습니다 대신 뷰에 사용합니다. 내가 경우

<%= @counties.map(&:id).join.(',') %> 
0

나는 확실하지 않다 :보기에 그런

# controller 
def show 
    job_name = ... 
    @counties = ... 

    @county_jobs = @counties.order('name asc').includes(:jobs).where(jobs.name = ?', job_name) 
end 

, 검색된 직업을 가지고 모든 카운티를 보여 :

또는 더 나은 행동은 컨트롤러에이 코드를 이동 너를 올바르게 이해한다. 다음과 같은 것이 무엇입니까?

class Job < ActiveRecord::Base 
    has_many :countries, :through => :countyizations 
end 

class County < ActiveRecord::Base 
    has_many :jobs, :through => :countyizations 
end 

<%= @job.counties.sort{|a, b| a.name <=> b.name}.map{ |county| county.name }.join(", ") %> 

내가 사용 "has_many의"대신 "has_many_and_belongs_to"도 작동 할 수있다 생각합니다.

관련 문제