2012-04-10 2 views
2

사용자 컨트롤러가 아닌 관리자 컨트롤러에서 사용자 모델의 단일 속성을 업데이트하려고합니다.update_attribute/s()가 비밀번호 저장을 위해 콜백을 호출 중입니다.

나는 이것을 시도하는 동안 update_attribute()을 시도했지만 사용자 암호도 변경하고있었습니다.

암호를 해시하는 사용자 모델에서 before_save 메서드가 있기 때문에 암호가 변경된 것 같습니다. 이 presence=>true

이다 비밀번호에 대한 검증을 확인하기 때문에

update_attributes()이를 달성하기 위해 어떤 방법이 있나요 작동하지 않습니다?

답변

0

update_column(name, value)을 시도, 그것은 작동 할 수처럼 사용자의 단일 속성을 업데이트 할 수 있습니다 .

+0

이 작동했습니다 ... 감사합니다 ... –

0

이이

@user is that user whose attribute you want to update 

예를 들어 사용자 _

 @user.update_attributes(:user_name => "federe") 

그것을 시도하고 그것은 단지 하나 개의 속성을 업데이트합니다 ..

+0

하지만 확인을 위해 –

0

액티브 모두 검증을 콜백 건너에 '업데이트를 열'방법이있다 : 그러나

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_column

을, 나는 그것이 위험 할 수 좋을 것 - 당신이 그 : A의 before_save 필터 이유. 특정 경우에 우회하기 위해 필터에 an : except 메서드를 추가하면 재사용 할 수있을뿐만 아니라 동작의 일관성을 유지하고 모델의 유효성 검사/콜백 스택을 우회하는 컨트롤러에 메서드를 저장하지 않아도됩니다.

개인적으로 모델 내의 protected 메소드로을 제외한 을 update_column과 같은 메소드를 보는 데 지나치게 열중하지 않습니다.

0

시도 :

바이 패스 콜백 및 유효성 검사 사용 :

User.update_all({:field_name => value},{:id => 1}) 

그냥 당신이 알려 드리고자합니다 : 레일에서

  • , update_attribute 방법, 모델 검증을 우회 update_attributes 동안과 update_attributes! 저장하려는 레코드가 유효하지 않은 경우 실패합니다 (false를 반환하거나 예외를 발생시킵니다).

  • 두 가지의 차이점은 update_attribute 사용 save (false)입니다. 여기서 update_attributes는 save를 사용하거나 save (true)라고 말할 수 있습니다.

+0

아직 작동하지 않습니다. update_column이 잘 작동했습니다. –

1

:if 옵션을 사용하여 유효성 검사 조건을 설정할 수 있습니다.

validates :password, 
      :length => { :minimum => 8 }, 
      :confirmation => true, 
      :presence => true, 
      :if => :password_required? 


def password_required? 
    crypted_password.blank? || password.present? 
end 

그래서 기본적으로는 데이터베이스에 crypted_password이 (생성되는 새로운 기록을 의미) 설정하거나되지 않은 경우에만 새로운 password 경우이 제공되고있다 : 내 코드에서,이 같이 보입니다 유효성 검사가 실행됩니다.