2010-04-06 1 views
0
나는 다음과 같은 코드에 문제가

:Authlogic

User < AR 
    acts_as_authentic 

    belongs_to :owner, :polymorphic => true 
end 

Worker < AR 
    has_one :user, :as => :owner 
    accepts_nested_attributes_for :user 
end 

Employer < AR 
    has_one :user, :as => :owner 
    accepts_nested_attributes_for :user 
end 

I 사용자 유형에 따라 등록 양식을 작성하고 싶습니다, 및 사용자 이름 및 암호 인증 필드를 포함하는 . 현재이 작업을 수행합니다.

UserRegistrationController < AC 
    #i.e. a new Employer 
    def new 
    @employer = Employer.new 
    @employer.build_user 
    end 
... 
end 

다음으로 사용자 필드는 fields_for입니다. 모든 뷰 렌더링 괜찮아요,하지만 여기에 잡기 : 나는 사용자를 구축 할 수 없다, 그것은 :password 잘못된 방법입니다, 그래서 나는 인증 논리가 무시되었습니다 같아요. 어떻게해야합니까? 내가 잘못하고 있니? 단일 테이블 상속을 위해 다형성 연관을 삭제해야합니까? 내가하는 일이 무엇이든 Authlogic으로 잘 작동하는지 확인해야합니다.

답변

1

반대 방향으로 어느 유형의 신규 사용자를 만들겠습니까. 예 :

#controller 
@employer = Employer.new 
@user = @employer.build_user 

#view 
form_for @user |f| 
    f.text_field :login 
    f.password_field :password 
    fields_for :owner, @employer |f_e| 
    f_e.some_field :some_value 

#controller 
def create 
    @owner = params[:owner][:some_employer_field_or_virtual_attribute] ? Employer.new params[:owner] : Worker.new params[:owner] 
    @owner.save 
    @user = User.new(params[:user].merge!(:owner => @owner) 
    if @user.save 
    ... 

. 언급 된 가상 속성 - 모델에 필드가 없으므로 사용자 유형을 고용주 또는 작업자로 구분하는 형식으로 양식 내에 숨겨진 부울 필드로 넣을 수있는 가상 속성을 설정하십시오.

+0

안녕하세요. ! 나는 그것을 밖으로 시도 할 것이다. 생성 작업에서 무엇을 저장해야합니까? 둘 다 별도로 저장해야합니까? 나는 has_one 연관성을 고수하겠다. 게다가, 나는 지금 공간에 대해 그렇게 걱정하지 않는다. – ferparra

+0

둘 다 별도로 저장해야한다고 생각합니다. Rails는 다형성 관계의 다른 끝에있는 모델 유형을 판별 할 수 없습니다. 시도 | @employer = Employer.new (params [: 고용주]) | @ employer.save | @user = User.new (params [: user] .merge! (: owner => @employer)). 모델에서 accepts_nested_attributes_for를 제거해야합니다. – mark

+0

원래 양식 정의에서 소유자 필드에 사용자 속성을 정의하지 않았습니까? 아마도 이것이 작동해야하기 때문에 또 다른 대답을 게시 할 것입니다.^원래 응답으로 편집을 참조하십시오. – mark