我有一个电子商务网站,价格的定价在定价模型下的价格表中引用。
但是,我如何才能为同一商品的个别客户定制价格。我怎么能用Price模型做到这一点。
我尝试将user_id添加到表中,但似乎必须为每个客户端定价相同的价格。我该怎么办呢?
当前表格如下所示;
create_table "prices", :force => true do |t|
t.string "country"
t.string "network"
t.decimal "price_euros", :precision => 10, :scale => 3
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.decimal "price_ugx", :precision => 10, :scale => 3
t.decimal "price_kes", :precision => 10, :scale => 3
t.decimal "price_tzs", :precision => 10, :scale => 3
t.decimal "price_usd", :precision => 10, :scale => 3
end
答案 0 :(得分:1)
有各种方法可以实现这一目标。如果每个客户对所有商品都有相同的折扣,那么您可以将折扣属性添加到用户模型并将其应用于显示的价格。
如果您希望每个用户都有独特的产品价格,那么我会创建一个名为UserPrice的新模型,它有3个属性:user_id
,product_id
,price
。
然后我会在我的产品模型中有一个名为price_for_user
的方法,其中包含以下几行:
def price_for_user(user)
UserPrice.find_by_user_id_and_product_id(user.id,self.id).price
end
在视图中迭代您的产品时,您可以写:
<%= @product.price_for_user(current_user) %>
显然,您需要根据您的情况调整变量。我还会为UserPrice表中的user_id
和product_id
列编制索引以获取速度。
NB :如果是我,在我的控制器中,我还会考虑按用户查找所有UserPrices并创建哈希,然后在视图中通过在哈希中查找来显示价格。这可能会更快。
def index
@products = Product.all
@user_prices = UserPrice.where(user_id: current_user.id).index_by(&:product_id)
end
在您看来:
<%= @user_prices[product.id].price %>