Ruby on Rails更新用户角色

时间:2018-11-28 18:58:27

标签: ruby-on-rails roles user-roles

在用户成功付款后,我正在尝试将其角色从“免费”更新为“高级”。

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'

1 个答案:

答案 0 :(得分:1)

您确定不希望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位设置了。