为每个用户自定义数据库条目

时间:2013-12-17 11:34:36

标签: ruby-on-rails ruby

我有一个电子商务网站,价格的定价在定价模型下的价格表中引用。

但是,我如何才能为同一商品的个别客户定制价格。我怎么能用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

1 个答案:

答案 0 :(得分:1)

有各种方法可以实现这一目标。如果每个客户对所有商品都有相同的折扣,那么您可以将折扣属性添加到用户模型并将其应用于显示的价格。

如果您希望每个用户都有独特的产品价格,那么我会创建一个名为UserPrice的新模型,它有3个属性:user_idproduct_idprice

然后我会在我的产品模型中有一个名为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_idproduct_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 %>