2011-08-08 2 views
1

Michael Hartl이 만든 Rails 3 Tutorial의 인증 시스템을 채택하여 authlogic이나 devise와 같은 시스템으로 전환하기 전에 레일에 대해 더 잘 알 수 있습니다. 내 인증 시스템은 훌륭하게 작동하며 사용자 프로필을 작성하는 필드가 포함 된 사용자 모델이 있습니다. 예를 들어 사용자는 "테니스 선수, 암벽 등반가"와 같은 자신에 대한 광고를 작성할 수 있습니다.레일즈 3에서 사용자 프로필의 단일 필드 만 어떻게 업데이트 할 수 있습니까?

내가하고 싶은 것은 특정 필드 ("blurb") 만 업데이트하는 간단한 양식을 가질 수있게하는 것입니다. 사용자 프로필 페이지에서 '편집'이라는 링크를 클릭하면 사용자 블로거를 업데이트 할 수있는 입력란이있는 양식을 보여주는 부분 렌더링이 발생합니다.

in _edit_blurb.html .erb :

<div class = "editforms"> 
<%= form_for current_user do |f| %> 
<div class="field"> 
    <%= f.text_field :blurb, :class => "inputform round", :placeholder => "blurb" %> 
</div> 
<div class="actions"> 
    <%= f.submit "Update", :class => "submit_button round mini_button" %> <br> 
</div> 
<% end %> 
</div> 

이 양식은 사용자가 컨트롤러의 업데이트 작업에 제출하고 대부분의 사용자 추천 광고 및 아무것도를 업데이트합니다. 그러나 한 가지 결점은이 업데이트 동작이 사용자 암호를 변경하여 양식에 암호 필드가 없으므로 무효 암호를 제출한다는 것입니다. 이것은 명백한 이유 때문에 문제가됩니다. 원래는 다음 줄을 추가했습니다 : if => lamdba {new_record? || ! password.nil? }를 암호 유효성 검사에 추가하여 edit_blurb partial에서 암호를 요구하지 않고 업데이트 할 수 있도록합니다. 그러나, 당신이 볼 수 있듯이 이것은 비밀 번호가 저장되도록 허용합니다.

validates :password, :presence => true, 
        :if => lambda{ new_record? || !password.nil? }, 
        :confirmation => true, 
        :length => { :within => 6..40 } 

내가 폼 또는 (또는 둘 다) 검증 사용자가 업데이트없이 추천 광고를 업데이트 할 수 있도록 하나를 변경할 수있는 방법/자신의 비밀 번호를 입력 (그리고 리셋 - 투 - 전무 암호 업데이트 문제를 해결)?

내가 관련 코드를 제공했다고 생각하지만 도움이 될만한 것이 있다면 더 추가 할 것입니다! 모두에게 감사드립니다!

답변

2

암호 값이 nil 일 때 사용자 모델이 암호를 저장하지 못하도록하려는 것입니다. 나는 사용자 모델 설정 방법을 몰라,하지만 당신은 MH의 railstutorial을 따르고 한 경우, 암호가 호출 방법으로 저장해야합니다 :

before_save :encrypt_password 

User.rb.에서 이 문제를 해결하려면 다음을 추가하십시오.

before_save :encrypt_password, :if => lambda { !password.nil? } 

이렇게하면됩니다.

관련 문제