如何从控制器修改用户的一个属性?

时间:2013-03-01 16:52:38

标签: ruby-on-rails ruby-on-rails-3 controller

在我的应用中,普通用户应该能够点击按钮并成为超级用户。在控制台中,我可以获得一个用户然后执行user.super=trueuser.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 个答案:

答案 0 :(得分: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

请注意,super有OO含义,应该避免......