5

나는 사용자 모델을 가지고 있습니다. 사용자는 role1, role2, role3 중 하나의 역할을 가질 수 있습니다. 이것은 사용자 모델의 '역할'열에 의해 표현됩니다. 각 역할에는 고유 한 프로필이 있습니다. role1_profile, role2_profile, role3_profile. 각 * _profile은 모델입니다.레일스의 선택적 또는 조건부 모델 연관

레일스에서이 선택적 연결을 어떻게 표현합니까?

내가 그것을 두 가지 방법으로 시도했다 :

class User < ActiveRecord::Base 
    #FIRST WAY 
    if current_user.role == 'role1' then has_one :role1_profile end 
    #SECOND WAY 
    has_one :role1_profile, :conditions => ['user.role = ?', 'role1'] 
end 

하지만 그건 작동하지 않습니다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

답변

4

연결은 조건부로 작성된 것이 아닙니다. 아마 그렇게하는 것이 가장 쉽습니다.

User과 다양한 역할 프로필간에 다형성 연관이있는 것은 어떻습니까?

class User 
    belongs_to :role_profile, :polymorphic => true 
end 

class RoleXProfile 
    has_many :users, :as => :role_profile 
end 

은 물론, 당신은 당신의 사용자 테이블에 role_profile_idrole_profile_type 필드를 추가해야합니다.

무엇을하든 관계없이 사용자의 역할 또는 role_profile을 확인해야합니다.

+0

+1 코드를 입력하기가 너무 어려웠 기 때문입니다. –

+0

감사합니다. 나는 당신의 해결책이 완벽하다고 생각합니다. Rails에는 항상 방법이 있지만 길을 모르는 경우 이상한 방법으로 솔루션을 구현하는 경향이 있습니다. – hrdwdmrbl

+0

@ jackack 나는 당신의 접근이 전혀 이상하다고 생각하지 않는다. 정반대로 매우 논리적이었습니다. 그리고 ActiveRecord가 개선/확장 될 수있는 곳을 잘 지적 할 수 있습니다. 어쨌든 일이 잘되어서 다행입니다. –

4

대신 polymorphic association을 고려하고 적절한 역할 프로필을 갖고 싶을 수 있습니다.

내 이해는 :conditions모델이 충족해야하는 조건이었습니다. (그러나 나는 틀릴 수도 있습니다.) 모델이 충족해야합니다.

어쨌든, 나는 당신이 이것을 실제보다 더 어렵게 만들고 이러한 관계를 조건 적으로 만들어서 정말로 필요한 것을 모호하게 만들 것이라고 생각합니다.

+0

게으른 프로그래머가 좋은 프로그래머이기 때문에 +1) 그리고 협회에 사용 된 조건에 대한 메모 –

+0

@WizardofOgz 그건 내 상사에게 계속 알려주는 것입니다! 내 생각에 ... 햄릿? 누가 "게으름에서 혁신이 온다"고 말했다. –

+0

당신은 절대적으로 옳습니다! 그가 코드를 포함 시켰기 때문에 마법사에게 cred를주었습니다. :) – hrdwdmrbl