2013-03-01 3 views
0

내 앱에서 일반 사용자는 버튼을 클릭하여 수퍼 유저가 될 수 있습니다. 콘솔에서 사용자를 얻은 다음 user.super=true, user.save을 실행하면됩니다. 아래 코드를 내 컨트롤러에 넣었지만 사용자를 성공적으로 변경하는 대신 "작동하지 않음"오류가 깜박입니다. 어떻게 수정해야합니까?컨트롤러에서 사용자의 한 속성을 수정하려면 어떻게합니까?

def become_super 
    user = current_user 
    user.super = true 
    if user.save 
     flash[:success] = "You are super" 
    else 
     flash[:error] = "That didn't work" 
     redirect_to apply_path 
    end 
+1

아마 유효하지 않습니다. else 블록 안에'user'에 오류가 있는지 확인할 수 있습니까? – jvnill

+0

이거나'current_user.update_attributes (: super => true)'를 직접 사용할 수 있습니다. 그러나 유효성 검사를 다시 거치게됩니다. –

+0

@jvnill, 오류를 확인하는 방법은 무엇입니까? 로그를 살펴 봤지만 이유를 설명하지 않고 트랜잭션을 롤백한다고했습니다. –

답변

2

의견에 언급 된대로 유효성 검사에 문제가있을 수 있습니다.

당신은 모두 검증을 건너 뛸 수 있습니다

current_user.update_attribute(:super, true) # please note, singular! 

(모든 후, 당신은 단지 그들에게 슈퍼 유저를 만들고 싶어) 또는 당신은 또한 사용자가 (see ActiveRecord:Error)이 발생하는 유효성 검사 오류의 종류를 알릴 수

user.super = true 
if user.save 
    # as before 
else 
    flash[:error] = "Please fix your user record first, there are " + 
        "validation errors: #{user.errors.full_messages.join(", ")}" 
    redirect_to apply_path 
    # Note: Do not use this pattern for normal CRUD actions! 
end 

슈퍼는 OO 의미가 있으므로주의해야합니다.

관련 문제