2008-11-03 3 views
0

다 대다 관계가있는 테이블을 사용해야합니다. 올바른 테이블 코드를 만들었습니다 .ecure_project_tst_definition이 작동합니다. TstDefinition 객체에서 codesecure_projects < < 메서드를 호출하여 함께 행을 조인 할 수 있습니다. 문제는 어떤 이유로 활성 레코드가 codesecure_project_tst_definition 테이블의 id 값으로 Codesecure_project_id를 사용하려고한다는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? codesecure_projects를 호출 할 때 < < 메쏘드는 codesecure_project_tst_definition 테이블의 id를 설정하려고하지 않도록 수정해야합니까? 이 블로그 게시물 http://jimcortez.com/blog/?p=9에, 실제로 답을 발견 된 일부 검색 후 감사Activerecode HABTM 기본 키 문제

class TstDefinition < ActiveRecord::Base 
    has_and_belongs_to_many :codesecure_projects 
    has_many :tst_datas 

class CodesecureProject < ActiveRecord::Base 
    has_many :input_abstractions 
    has_and_belongs_to_many :tst_definitions 
+0

연관 줄이있는 클래스 정의를 표시 할 수 있습니까? – Gareth

+0

나는 문제를 이해할 수 없었다. 게시 테이블 스키마 .. Gareth가 말한 것처럼 .. AR 모델 클래스를 게시하는 것이 도움이 될 수도있다. – Gishu

답변

4

:

나는

class CreateCodesecureProjects < ActiveRecord::Migration 
    def self.up 
    create_table :codesecure_projects do |t| 
     t.string :name 
     t.string :lang 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :codesecure_projects 
    end 
end 


class CreateTstDefinitions < ActiveRecord::Migration 
    def self.up 
    create_table :tst_definitions do |t| 
     t.string :test_name 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :tst_definitions 
    end 
end 


class CreateCodesecureProjectsTstDefinitions < ActiveRecord::Migration 
    def self.up 
    create_table :codesecure_projects_tst_definitions do |t| 
     t.references :codesecure_project 
     t.references :tst_definition 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :codesecure_projects_tst_definitions 
    end 
end 

아래 관련 모델의 부품을 마이그레이션을 기록했다. codeecure_projects_tst_definitions 테이블에서 id 열을 제거하기 만하면되었습니다. 이제 마이그레이션은 다음과 같이 보입니다.

class CreateCodesecureProjectsTstDefinitions < ActiveRecord::Migration 
    def self.up 
    create_table :codesecure_projects_tst_definitions, :id => false do |t| 
     t.references :codesecure_project 
     t.references :tst_definition 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :codesecure_projects_tst_definitions 
    end 
end 
+0

나는이 글을 타이핑했다. join 테이블을 실제 조인 모델로 만드는'has_many : through' 연관을 사용하는 것도 고려해야한다. 이것은 2 년 전에 추가 된 것입니다. [http://weblog.rubyonrails.org/2006/04/21/habtm-vs-has_many-through/]하지만 아마도 좀 더 깊이있는 참조가있을 것입니다. – Gareth