这是我将作为起点的地方。
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-rails
gem)。您想在网站上显示的所有价格都应使用此方法在视图上呈现。方法看起来像这样(如果你没有看到其他更适合的地方,你可以把它放在你的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) %>
希望能帮助到你!