1

我已经搜索了几个小时,并一一查看了所有谷歌搜索结果...阅读有关 RubyMoney、Money-Rails 的信息。我是 Rails 新手,但我仍然不明白如何为我的整个 Ruby on Rails 应用程序获取货币切换器。

  1. 在我的 Gemfile

    gem 'money-rails' 
    
    gem 'json'
    
    gem 'bigdecimal'
    
  1. 创建 config/initializers/money.rb

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

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

4

1 回答 1

1

这是我将作为起点的地方。

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)在应用程序布局中的某处或您认为应该与您感兴趣的所有货币一起使用的任何地方添加货币选择器(:usd,:eur等)。使用此选择框的on change javascript事件或按钮触发 Rails 操作,将所选货币保存在会话变量上(让我们从现在开始在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'

只是缺少选择框和提交按钮的表单 - 请随意执行此操作:)

4)添加一个辅助方法来呈现价格(我假设你所有的价格属性都被定义为monetize使用money-railsgem)。您想在网站上显示的所有价格都应使用此方法在视图上呈现。方法看起来像这样(如果你没有看到其他更适合的地方,你可以把它放在你的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

这是一个简化版本,您还应该添加一些异常处理查看 google_currency gem以获取更多文档。

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

<%= converted_price(item.item_price) %>

希望能帮助到你!

于 2016-04-18T18:08:55.750 回答