如何根据用户的IP地址显示产品价格

时间:2017-08-28 15:28:05

标签: ruby-on-rails e-commerce rails-geocoder

我正在建立一个电子商务网站,我想根据用户的IP地址显示产品的价格。要获取IP,我使用以下代码:current_user.current_sign_in_ip。要获取IP地址的区域,我使用:Geocoder.search(current_user.current_sign_in_ip)。我的Product模型通过表CurrencyProductCurrency模型相关联,我在其中存储product_idcurrency_id和'价格'。

class Product < ApplicationRecord
  belongs_to :category
  has_many :variants
  has_many :product_currencies
  has_many :currencies, through: :product_currencies
  accepts_nested_attributes_for :product_currencies, allow_destroy: true
  accepts_nested_attributes_for :variants, allow_destroy: true, reject_if: :all_blank
end

class Currency < ApplicationRecord
  has_many :product_currencies, dependent: :destroy
  has_many :products, through: :product_currencies
  has_many :currency_regions
  has_many :regions, through: :currency_regions
end

class ProductCurrency < ApplicationRecord
  belongs_to :product
  belongs_to :currency
end

因此,我的Product可以有多种货币(欧元,美元)和价格(100欧元,150美元)。对于Currency模型,我有一个名为CurrencyRegion的联接表,我在其中存储currency_idregion_id。以及一个名为Region

的相关模型
class Region < ApplicationRecord
  has_many :currency_regions
  has_many :currencies, through: :currency_regions
end

class CurrencyRegion < ApplicationRecord
  belongs_to :currency
  belongs_to :region
end

那么,如果用户的IP地址来自美国,我该如何以美元显示产品的价格?谢谢。

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

region = Geocoder.search(current_user.current_sign_in_ip)
price  = ProductCurrency.
           joins(currency: :regions).
           where('regions.name = ?', region).
           pluck('product_currencies.price').
           first