【问题标题】:Ruby on rails Updating User rolesRuby on rails 更新用户角色
【发布时间】:2019-04-30 18:23:50
【问题描述】:

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

用户.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'

【问题讨论】:

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


    【解决方案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 位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-14
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多