Ruby 于 rails 更新用户角色

Ruby on rails Updating User roles

我正在尝试在用户成功付款后将他们的角色从 'free' 更新为 'premium'。

User.rb

   class User < ApplicationRecord

    enum role: [:free, :premium]
    before_create :assign_default_role

      def assign_default_role
      self.role ||= :free
      end
end 

订阅控制器

def create

  @user = current_user

    @subscription = Subscription.new(subscription_params)
  if @subscription.save_with_payment
    redirect_to @subscription, :notice => "Thank you for subscribing"
    @user.update_attribute(role: premium )
  else
    render :new
  end
end

我在尝试让用户付款后收到此错误未定义的局部变量或方法“高级”

您确定不希望 premium 成为 :premium 吗?更好的是,如何:

@user.premium!

就我个人而言,我更喜欢使用enum的形式:

class User < ApplicationRecord

  enum role: {
    free:     0,
    premium:  1
  }

  before_create :assign_default_role

  def assign_default_role
    self.role ||= :free
  end

end

由于 docs 中讨论的原因。

最后,也许您应该考虑在 role 上设置一个默认值(使用迁移),这样您就不必这样做 before_create 位。