2017-08-28 7 views
0

Ich baue eine E-Commerce-Website und möchte den Produktpreis aufgrund der IP-Adresse des Benutzers anzeigen. Um die IP zu bekommen benutze ich diesen Code: current_user.current_sign_in_ip. Um den Bereich der IP-Adresse zu erhalten, verwende ich diesen: Geocoder.search(current_user.current_sign_in_ip). Mein Product Modell ist mit einem Currency Modell über eine Tabelle ProductCurrency verbunden, wo ich product_id, currency_id und "Preis" speichern.Wie kann ich den Produktpreis aufgrund der IP-Adresse des Benutzers anzeigen

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 

Also, meine Product können mehrere Währungen haben (EUR, USD) und Preise (100 EUR, 150 USD). Für ein Currency Modell habe ich eine Verbindungstabelle namens CurrencyRegion, wo ich currency_id und region_id speichern. Und ein verwandtes Modell 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 

Sogenannte, was kann ich tun Produktpreis in USD angezeigt werden, wenn die Nutzer-IP-Adresse aus den USA ist? Danke voraus.

Antwort

0

Bitte versuchen Sie es unten Code:

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

Dank, so scheint es, die Lösung, die ich brauche –

Verwandte Themen