: email, display_name 및 handle이라는 세 개의 필드가있는 User 모델이 있습니다. 핸들은 display_name에서 장면 뒤에서 생성됩니다.레일 유효성 검사 문제
나는 다음과 같은 검증을 사용하고 있습니다 :
validates :display_name, :presence => :true, :uniqueness => { :message => "Sorry, another user has already chosen that name."}, :on => :update
validates :email, :presence => :true, :uniqueness => { :message => "An account with that email already exists." }
나는 모델의 to_param
로 핸들을 사용합니다. 사용자가 이미 존재하는 : display_name을 제출하여 유효성 검사에 실패한 경우이를 변경하고 양식을 다시 제출하려고 시도하면 Rails는 전자 메일의 유효성 검사로 새 핸들을 사용하는 것으로 보입니다 - 다시 말해서 전자 메일이 현재 사용자에게 속해 있지 않으며 전자 메일의 유효성 검사가 실패합니다. 이 시점에서 레일스는 변경된 표시 이름/핸들이 조회에 사용할 핸들이며 업데이트 작업은 새 핸들을 기반으로 사용자를 찾을 수 없기 때문에 전혀 완료 할 수 없다고 가정합니다.
다음은 업데이트 방법입니다 :
def update
@user = User.find_by_handle(params[:id])
@handle = params[:user][:display_name]
@user.handle = @handle.parameterize
...
end
검증 먼저 중복 이메일에 실패 할 때이 문제가 발생하지 않습니다, 그래서 나는 그것이 내가 update 메소드를 작성한 방법에 대해 뭔가 있으리라 믿고있어 - - 어쩌면 모델에서 핸들을 설정해야합니까?
나는 왜 컨트롤러에서 설정했는지 기억이 나지 않습니다 ... 아마 편의를 잃었을 것입니다. – Slick23