Rails 4 业务逻辑,授权 - 基于身份验证更新价格
Rails 4 Business Logic, Authorization - Updating Prices based on Authentication
我有一个超级基本的电子商务应用程序,其中包含一个通过 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 类 来覆盖它们的价格方法,这一切都感觉不对,坦率地说,我不知道它是否会起作用。
尝试一下,如果有帮助的话
class 应用程序控制器 < ActionController::Base
before_filter 做 |obj|
User.current_user = User.find(obj.session[:user]) 除非 obj.session[:user].nil?<br>
结尾
结束
class User < ActiveRecord::Base
attr_accessor :current_user
end
我稍微改变了策略。我决定创建一个方法来覆盖我的购物车实例上的 total
方法。我不想更改价格,我只是将折扣应用于总价,就像您在结帐视图中看到的那样。
我在模型 shopping_cart.rb
中创建了一个实例方法,如下所示:
def discount(user)
if user && user.provider == 'facebook'
def total
super * 0.8
end
else
def total
super
end
end
end
然后我就可以在controller中调用这个方法然后传入current_user
shopping_carts_controller.rb
def show
@shopping_cart.discount(current_user)
end
在视图中,我只有 @shopping_cart.total
,其中 total
方法根据用户的 oauth 提供商被覆盖!
我有一个超级基本的电子商务应用程序,其中包含一个通过 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 类 来覆盖它们的价格方法,这一切都感觉不对,坦率地说,我不知道它是否会起作用。
尝试一下,如果有帮助的话
class 应用程序控制器 < ActionController::Base
before_filter 做 |obj|
User.current_user = User.find(obj.session[:user]) 除非 obj.session[:user].nil?<br>
结尾
结束
class User < ActiveRecord::Base
attr_accessor :current_user
end
我稍微改变了策略。我决定创建一个方法来覆盖我的购物车实例上的 total
方法。我不想更改价格,我只是将折扣应用于总价,就像您在结帐视图中看到的那样。
我在模型 shopping_cart.rb
中创建了一个实例方法,如下所示:
def discount(user)
if user && user.provider == 'facebook'
def total
super * 0.8
end
else
def total
super
end
end
end
然后我就可以在controller中调用这个方法然后传入current_user
shopping_carts_controller.rb
def show
@shopping_cart.discount(current_user)
end
在视图中,我只有 @shopping_cart.total
,其中 total
方法根据用户的 oauth 提供商被覆盖!