Ruby rails 整个站点的货币切换器

Ruby on rails currency switcher for whole site

我已经搜索了几个小时,并一一查看了所有 google 结果...阅读有关 RubyMoney, Money-Rails 的信息。我是 rails 的新手,我仍然无法理解 如何在 Rails 应用程序上为我的整个 Ruby 获取货币切换器。

  1. 在我的 Gemfile 中

    gem 'money-rails' 
    
    gem 'json'
    
    gem 'bigdecimal'
    
  1. 捆绑包
  2. 创建config/initializers/money.rb

    MoneyRails.configure do |config|
      config.default_currency = :eur
    end
    
  3. <%= humanized_money_with_symbol (item.item_price) %> 在视图中将该数字格式化为货币。

  4. 如何让像 Airbnb 这样的货币选择器通过欧盟银行或 google 的自动汇率更新来更改网站的所有价格?我无法理解关于此的 RubyMoney 文档...

这里是我要开始的地方。

1) 添加到 Gemfile:

gem 'google_currency'

2) 添加到 config/initializers/money.rb:

MoneyRails.configure do |config|
  config.default_currency = :eur

  # set default bank to instance of GoogleCurrency
  Money::Bank::GoogleCurrency.ttl_in_seconds = 86400
  config.default_bank = Money::Bank::GoogleCurrency.new
end

3) 添加货币 select 或 应用程序布局中的某处 或您认为它应该与您感兴趣的所有货币一起使用的任何地方 (:usd, :eur , ETC。)。使用此 select 框的 on change javascript 事件或按钮触发 rails 操作以保存 selected currency on a session variable (让我们从现在起称它为 session[:currency]) 并且还会刷新当前页面(如果你在当前页面上显示一些价格 -如果你只使用一个按钮,一个简单的 redirect_to :back 会做,否则如果你的响应是 js 格式使用 window.location.reload();)。操作看起来像这样:

def save_currency
  session[:currency] = params[:currency]
  respond_to do |format|
    format.html { redirect_to :back }
  end
end

在你的 routes.rb 上(随心所欲更换控制器)像这样:

post '/controller/save_currency', to: 'controller#save_currency'

只有缺少 select 框和提交按钮的表单 - 请按您的意愿操作:)

4) 添加一个辅助方法来呈现价格(我假设您的所有价格属性都使用 money-rails gem 定义为 monetize)。您要在站点上显示的所有价格都应使用此方法在视图上呈现。方法看起来像这样(你可以把它放在你的 application_helper.rb 上,如果你没有看到其他地方它会更合适):

def converted_price(price)
  if session[:currency].present?
    humanized_money_with_symbol(price.exchange_to(session[:currency]))
  else
    humanized_money_with_symbol(price)
  end
end

这是一个简化版本,您还应该添加一些异常处理look at google_currency gem以获得更多相关文档。

5) 在您想要打印价格的所有视图中,使用类似于此的代码(我使用的示例与您所做的相同):

<%= converted_price(item.item_price) %>

希望对您有所帮助!