【发布时间】:2015-02-03 11:05:05
【问题描述】:
我有一个超级基本的电子商务应用程序,其中包含通过 Omniauth 验证的 User 模型、带有名称和价格的 Product 模型以及 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 类来覆盖他们的价格方法,这一切都感觉不对,坦率地说我不知道它是否会起作用。
【问题讨论】:
标签: ruby-on-rails business-logic role-base-authorization