2010-11-25 1 views
0

부모와 자식 인 두 모델이 있습니다. 부모는 자녀가 많고 자녀에게는 부모가 하나 있습니다. has_many와 belongs_to를 사용하는 일대 다 관계. 물론 child에는 parent_id 필드가 있습니다.Rails3, 일대 다 관계, 저장시 자식 모델의 parent_id가 유효한지 확인하는 방법

parent_id가 유효한 경우 하위에 대한 유효성을 검사하고 싶습니다 (부모가 해당 ID를 가지고 있음을 의미).

validates_associated 생각하지만 unittest에서 작동하지 않았다.

고유 한 유효성 검사기를 생성해야합니까? 아니면 더 일반적인 방법이 있습니까?

답변

0

왜 마이그레이션에 데이터베이스 외래 키 제약 조건을 추가하지 않습니까?

class CreatePages < ActiveRecord::Migration 
     def self.up 
     create_table :pages do |t| 
      t.references :upload, :null => false 
      t.integer :number 
      t.integer :position 
      t.integer :color 

      t.timestamps 
     end 

     execute "ALTER TABLE pages 
       ADD CONSTRAINT fk_pages_upload_id 
       FOREIGN KEY (upload_id) REFERENCES uploads(id)" 
     end 

     def self.down 
     execute "ALTER TABLE pages DROP CONSTRAINT fk_pages_upload_id" 
     drop_table :pages 
     end 
end 

이 같은 뭔가 일을의 "레일"방법처럼 보이지 않을 수 있지만, PERSONNALY, 나는 느낌 데이터베이스가 웹 응용 프로그램에서 사용 미만되어 있습니다. 제약 조건은 강력합니다. 왜 사용하지 않을까요!

안부,

필립

+0

검색어를 이해할 수는 있지만 필자는 생각하지 않습니다. 다른 것을 제안 해 주시겠습니까? –

0

당신은 foriegn_key 모두 채워져 있는지 확인하기 위해 하위 모델에 validates_associatedvalidates_presence_of를 모두 사용해야하고, 상위 모델은 해당 테이블에 존재합니다. 문서의 메모를 참조하십시오. validates_associated

+0

내 단위 테스트에서 여전히 작동하지 않습니다. (SystemStackError : 스택 수준이 너무 깊음을 나타냅니다.) –

+0

하위 모델과 상위 모델 모두에 대해 'validates_associated'를 지정 했습니까? 이것을 언급하기 위해 연결된 문서는 무한 재귀를 발생시킵니다. 자식 또는 부모 중 하나에서 지정하려면 – Jeremy