我正在建立一个电子商务网站,我想根据用户的IP地址显示产品的价格。要获取IP,我使用以下代码:current_user.current_sign_in_ip
。要获取IP地址的区域,我使用:Geocoder.search(current_user.current_sign_in_ip)
。我的Product
模型通过表Currency
与ProductCurrency
模型相关联,我在其中存储product_id
,currency_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_id
和region_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地址来自美国,我该如何以美元显示产品的价格?谢谢。
答案 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