2013-01-16 4 views
0

문제가 발생했습니다. '사용자'모델과 '전문가'모델이 있습니다. 전문 모델에서는 사용자가 속한 것으로 지정됩니다.레일 관계 "Has_none_or_one"

그러나 사용자 모델에는 서면으로 된 관계가 없습니다. 그럴 필요가 없다는 것은 아무 것도 잘못이 아닙니다. 사용자는 belongs_to 덕분에 전문가가 될 수 있지만 언제나 그런 것은 아닙니다.

여기에 문제가 있습니다. 사용자 49가 전문가인지 테스트하려면 "User.find (49) .professional"을 수행 할 수 없습니다 (부울을 반환해야 함).

그러나 "Professional.find (65) .user"를 수행 할 수 있습니다. 전문적인 65 번 사용자가 사용자이면 true를, 그렇지 않은 경우 false를 반환합니다.

- if @user.professional? 
    div class="page-header" 
    h1 Professional info 
    ul style="list-style: none" 
    // Id 
    li 
    strong 
     = model_class.human_attribute_name(:id) 
     ' : 
    = @user.professional.id 
    // Country 
    li 
    strong 
     = model_class.human_attribute_name(:country) 
     ' : 
    = @user.professional.country 

[...] 

내가 넓은 "리"목록을 가지고 : 일부 사용자보기에서

, 나는 그것 때문에 작동하지 않습니다이 있습니다. 그래서 if 조건이 작동하지 않으며 @ user.professional.someprofessionalattribute가 작동하지 않습니다.

내가 처음 생각한 것은 사용자 모델 "has_none_or_one"에 작성해야한다는 것이었지만 공식 문서를 살펴보면 존재하지 않습니다. 당신의 도움이

답변

4

has_one에 대한

덕분에이 - 하나 또는-없음 관계입니다. 사용자에게 해당 전문가가없는 경우 해당 전문가는 nil입니다.

+0

감사합니다. 나는 몰랐으며, 매우 빨리 매력처럼 작동합니다! 문서를 읽은 후에도 설명이 잘못되었다고 생각합니다. _ _ "고마워요. – sidney

+0

@sidney : 도와 주셔서 감사합니다. StackOverflow에 대한 답변으로 질문에 대한 답이 나오면, 옆에있는 체크 표시를 클릭하십시오. "승인 됨"으로 표시하십시오. 이것은 사이트를 체계적으로 유지하는 데 도움이되며 질문자와 답변자가 모두 훌륭한 시민임을 인정합니다 :) 감사합니다! – Matchu

1

예를 들어 "has_one"에 사용 :

이 모델 사용자에 관계

만들기 : 전문 모델

class User < ActiveRecord::Base 
#add this parameter in yours attributes 
attr_accessible :user_id 

belongs_to :user 
end 

인덱스를 추가에서

class User < ActiveRecord::Base 
has_one :professional, :dependent => :destroy 
end 

을 User to Professional 모델 (마이그레이션 생성). 마이그레이션 만들어 추가에

rails g migration addIdUserToProfesional 

class addIdUserToProfesional < ActiveRecord::Migration 
    def change 
    add_column :professionals, :user_id, :integer 
    add_index :professionals, :user_id 
    end 
end 

PDT를 : 아니 아주 잘, 감사합니다 여전히 미안 내 영어.

+0

감사합니다.하지만 모든 것을 할 필요는 없습니다. 인용문과 다른 대답은 충분했다.) – sidney

+0

아무도 아직 응답하지 않은 게시물을 보았을 때><< –