두 모델 Story
및 Chapter
이 있습니다. 이야기 has_many
챕터 중 하나는 첫 챕터로 사용되는 장입니다. 나는 어떤 장이 첫 번째인지를 나타 내기 위해 외래 키 start_id
을 이야기 테이블에 가지고있었습니다. Hovewer는 데이터베이스 스키마를 약간 변경해야했지만 이제는 모든 장이 code
입니다. 코드가 '1a'
인 경우 해당 장을 소유 한 스토리의 첫 번째 장이됩니다. 다음ActiveRecord has_one 및 has_many : foreign_key
#create_start
을 포함하여, 작동하는 것 같다 :
has_many :chapters, :dependent => :destroy, :inverse_of => :story
has_one :start, :class_name => 'Chapter', :foreign_key => 'story_id', :conditions => {:code => '1a'}
이 방법은, 외래 키 테이블이 필요없는 것입니다 이야기의 start_id
및 #start
여전히 모든 혜택과 관련, 남아 (I는 다음과 같이 #start
필요 나는 연관을 가지고 CanCan을 사용하기 때문에 협회입니다.)
내 접근 방식에는 현재 실현하지 못한 단점이 있습니까? 아니면 비교적 안전합니까?
아, 나는 몰랐다 ': 같은 것으로 시작합니다
는 또한, 당신은 has_one의 선언을 변경할 수 있습니다, 자신을 반복하지 않도록하는 through'는 사용할 수없는 모델 만 가입을 위해, 뿐만 아니라 부분 집합입니다. 그건 분명히 깨끗합니다. –
... 내 개발 데이터베이스를 다시 만든 후 갑자기 CanCan이 작동을 멈췄습니다. 만약 내가 좀 더 장황한 관계로 되돌아 간다면, 다시 좋을 것입니다. 얼마나 이상합니다. –