我有一个超级基本的电子商务应用程序,其中包含通过 Omniauth 验证的用户模型、带有名称和价格的产品模型以及 ShoppingCart 和 ShoppingCartItem 模型(使用acts_as_shopping_cart
gem)。
我的问题是,当我让用户通过 Omniauth 提供商进行身份验证时,我想根据他们的身份验证对象提供折扣。
假设他们使用 facebook 登录 - 那么我想为他们提供 20% 的折扣。我不知道实际上该怎么做 - 我想我想在我的 Product 和 ShoppingCartItem 模型中编写这个业务逻辑,设置类似
def self.price
if current_user.provider == 'facebook'
super * 0.8
else
super
end
但我无法current_user
在模型中访问,因为它是由会话设置的。
我应该在可以访问 current_user 的控制器中执行此操作吗?然后我必须在控制器中打开 Product 和 ShoppingCartItem 类来覆盖他们的价格方法,这一切都感觉不对,坦率地说我不知道它是否会起作用。