2012-10-03 5 views
1

두 개의 레일스 모델 사이의 관계를 매핑하고 싶습니다. 한쪽이 optionnal 일 수 있습니다. 내가 더 정확한지 ...레일스 : ActiveRecord의 선택적 관계 모델링

나는 사용자 프로파일 정보 (이름, 나이 등)를 저장하는 ProfileUser 모델을 가지고 있습니다.이 모델은 응용 프로그램 (전자 메일, 암호 등)에 대한 사용자 액세스를 저장합니다.).

User 모델은 Sign Up/Signing을 위해 Devise gem에서 처리됩니다. 여기

내 응용 프로그램의 시나리오 :

사용자 레지스터, 새 행이 User 테이블에서 생성 Profile 테이블에 해당이됩니다

1 /. 이것은 다음 스크립트로 연결 :

class User < ActiveRecord::Base 
    belongs_to :profile 
end 

2/여기 (그래서 Profile의 행이 반드시 User 행에 해당이없는, (공공 정보의 공개 프로필의 종류) 회원 가입없이이 프로필의 만들 수있는 사용자 선택적 관계, UML의 0..1 관계).

질문 :class Profile < AR::Base에 입력 할 해당 스크립트는 무엇입니까? User으로 선택적으로 매핑 할 수 있습니까?

미리 감사드립니다.

+0

사용자에게 할당하지 마시겠습니까? – varatis

+0

나는 그것을 할당해야한다. 왜냐하면 그것이 존재할 때'User' 정보를 얻는 것을 도울 것이기 때문이다. – htaidirt

+0

기본적으로 선택 사항입니다. 할당되지 않은 경우 @Doon이 말했던 것처럼 되돌릴 수 없습니다. – varatis

답변

4
class Profile << ActiveRecord::Base 
    has_one :user 
end 

모든 AR 관계는 선택 사항입니다. (적어도 기본적으로 - 나는 그것이 존재할 수 있는지 확실하지 않습니다.) 관계가 설정되어 있지 않은 profile.user을 묻는다면 nil이 반환됩니다.

+3

외래 키에 not null 제약 조건을 설정하고 validates_associated를 사용하여 이들을 만들 수 있습니다. – Doon

+0

그래서 'has_one'은 "엄격하게 1"이 아니라 "1이 있음"을 의미하지 않습니다. 0 또는 1을 의미)? – htaidirt

+0

@Doon - 감사합니다. 감사합니다. – Chowlett