在用户成功付款后,我正在尝试将其角色从“免费”更新为“高级”。
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'
答案 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
位设置了。