2011-11-27 2 views
1

this 질문의 도움 외에도 마침내 내 관계를 통해 많은 관계를 맺고 있습니다.다른 기본 및 외래 키를 통해 다수 있음

불행하게도 기존 DB로 작업 중이므로 기본 레일 조인 방법을 사용할 수 없으므로 열 이름과 필드 값을 모두 변경해야합니다.

두 개의 모델이 있습니다 : raduser와 radgroup이 둘은 radusergroup을 통해 결합되었습니다. 아래의 모델.

raduser_id 및 radgroup_id 키를 사용하여 조인을 사용할 수 있습니다. 내가해야 할 일은 각각 사용자 이름과 그룹 이름으로 변경하는 것입니다. 대신에이처럼 보이는 테이블의

:

+---------------------------+---------------------------+----------+----+ 
| raduser_id    | radgroup_id    | priority | id | 
+---------------------------+---------------------------+----------+----+ 
| 33      | 2       |  1 | 21 | 
| 33      | 1       |  1 | 20 | 
| 32      | 3       |  1 | 25 | 
+---------------------------+---------------------------+----------+----+ 

나는 그것을 다음과 같이해야합니다

+---------------------------+---------------------------+----------+----+ 
| username     | groupname     | priority | id | 
+---------------------------+---------------------------+----------+----+ 
| jenny      | staff      |  1 | 21 | 
| steve      | sports     |  1 | 20 | 
| ianw      | travel     |  1 | 25 | 
+---------------------------+---------------------------+----------+----+ 

나는 내 모델에서 다음을 시도했지만 지금까지, 그것은 실패입니다.

class Raduser < ActiveRecord::Base 
    has_many :radusergroup, :dependent => :destroy, :primary_key => :groupname, :foreign_key => :username 
    has_many :radgroup, :through => :radusergroup 
end 

class Radusergroup < ActiveRecord::Base 
belongs_to :raduser, :foreign_key => 'groupname', :primary_key => 'username' 
belongs_to :radgroup, :foreign_key => 'username', :primary_key => 'groupname' 
end 

class Radgroup < ActiveRecord::Base 
    set_table_name 'radgroup' 
    has_many :radusergroup, :dependent => :destroy, :primary_key => :groupname, :foreign_key => :username 
    has_many :raduser, :through => :radusergroup 
end 

올바른 방법은 무엇입니까?

- UPDATE -

양식 코드 :

- Radgroup.all.each do |radgroup| 
    = check_box_tag "raduser[radgroup_ids][]", radgroup.id, @raduser.radgroup.include?(radgroup), :id => "raduser_radgroup_id_#{radgroup.id}" 
    = radgroup.groupname 

답변

2

당신은 아마 당신의 가입 테이블에서 id 컬럼을 원하지 않는 :

여기
class CreateRadusergroups < ActiveRecord::Migration 
    def change 
    create_table :radusergroups, :id => false do |t| 
     t.integer :priority 
     t.string :username, :groupname 
    end 
    end 
end 

가 설정하는 방법에 모델 :

class Raduser < ActiveRecord::Base 
    has_many :radusergroups, :foreign_key => :username 
    has_many :radgroups, :through => :radusergroups 
end 

class Radgroup < ActiveRecord::Base 
    has_many :radusergroups, :foreign_key => :groupname 
    has_many :radusers, :through => :radusergroups 
end 

class Radusergroup < ActiveRecord::Base 
    belongs_to :raduser, :foreign_key => :username 
    belongs_to :radgroup, :foreign_key => :groupname 
end 
+0

생각해보십시오. 양식을 제출할 때 여전히 ID를 입력합니다. 양식 코드로 내 질문을 업데이트했습니다. 이것에서 무엇을 바꾸어야합니까? 일본 –

관련 문제