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
位。
我正在尝试在用户成功付款后将他们的角色从 '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
位。