Ruby rails 整个站点的货币切换器
Ruby on rails currency switcher for whole site
我已经搜索了几个小时,并一一查看了所有 google 结果...阅读有关 RubyMoney, Money-Rails 的信息。我是 rails 的新手,我仍然无法理解 如何在 Rails 应用程序上为我的整个 Ruby 获取货币切换器。
在我的 Gemfile 中
gem 'money-rails'
gem 'json'
gem 'bigdecimal'
- 捆绑包
创建config/initializers/money.rb
MoneyRails.configure do |config|
config.default_currency = :eur
end
<%= humanized_money_with_symbol (item.item_price) %>
在视图中将该数字格式化为货币。
如何让像 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) %>
希望对您有所帮助!
我已经搜索了几个小时,并一一查看了所有 google 结果...阅读有关 RubyMoney, Money-Rails 的信息。我是 rails 的新手,我仍然无法理解 如何在 Rails 应用程序上为我的整个 Ruby 获取货币切换器。
在我的 Gemfile 中
gem 'money-rails' gem 'json' gem 'bigdecimal'
- 捆绑包
创建config/initializers/money.rb
MoneyRails.configure do |config| config.default_currency = :eur end
<%= humanized_money_with_symbol (item.item_price) %>
在视图中将该数字格式化为货币。如何让像 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) %>
希望对您有所帮助!