Ruby on rails 更新用户角色

Posted

技术标签:

【中文标题】Ruby on rails 更新用户角色【英文标题】:Ruby on rails Updating User roles 【发布时间】: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'

【问题讨论】:

【参考方案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 位。

【讨论】:

以上是关于Ruby on rails 更新用户角色的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails(三)隐藏部分视图

Ruby on Rails 无需密码即可更新用户属性

Ruby on Rails - rails g 脚手架外键

Ruby on Rails 复选框未在提交表单时更新

如何使用相同的表单在 ruby​​ on rails 中创建和编辑

Ruby on Rails全栈课程3.8 权限管理之超级管理员审批功能实现