我的应用GBP, JMD, USD
支持3种货币。
当用户在一页上选择一种货币时,它将重新加载页面并相应地设置session[:currency]
变量。挑战在于,取决于他们从3种货币中选择的货币,其行为并非总是可预测的且相同。
我可能一直在研究这种逻辑太久了,但是我不知道为什么它不起作用,并且会喜欢另一双眼睛。
因此,我从application_controller.rb
开始:
unless params[:currency].blank?
if params[:currency] != session[:currency] || session[:previous_currency].blank?
session[:previous_currency] = session[:currency]
session[:currency] = params[:currency]
end
else
if session[:currency].blank?
session[:currency] = 'JMD'
end
end
那并没有真正捕获USD, GBP
。
因此,对此进行了修改:
unless params[:currency].blank? && session[:currency].blank?
if (params[:currency].eql? "JMD") || (session[:currency].eql? "JMD")
session[:currency] = 'JMD'
session[:locale] = :en
session[:previous_currency] = 'GBP'
elsif (params[:currency].eql? "GBP") || (session[:currency].eql? "GBP")
session[:locale] = :"en-GB"
elsif (params[:currency].eql? "USD") || (session[:currency].eql? "USD")
session[:locale] = :en
elsif params[:currency] != session[:currency] || session[:previous_currency].blank?
session[:previous_currency] = session[:currency]
session[:currency] = params[:currency]
end
else
session[:currency] = 'JMD'
session[:locale] = :en
end
问题是,当我从任何一种货币兑换到GBP
时,这都不起作用,我也不知道为什么。
我的意思是说我从USD
变为GBP
。如果我转到另一个页面(例如主页),它将恢复为默认的JMD
货币。当我希望它停留在GBP
时,就像切换到USD
并更改页面一样,一切都停留在USD
中。
我想念什么?
答案 0 :(得分:1)
有了映射,就像许多elsif
一样容易。
我希望这是合乎逻辑的。清楚地理解您的问题并不容易,但也许会有所帮助。
if params[:currency] != session[:currency] || session[:previous_currency].blank?
return session.merge!(previous_currency: session[:currency], params[:currency])
end
default = { currency: 'JMD', locale: :en }
mapping = { 'JMD': { currency: 'JMD', locale: :en, previous_currency: 'GBP' },
'GBP': { locale: :"en-GB" },
'USD': { locale: :en } }
# if you're using Ruby >= 2.3.0
values = mapping.detect{ |k, v| k.to_s == params[:currency] || session[:currency] }&.last
# if you're using Ruby < 2.3.0
values = mapping.detect{ |k, v| k.to_s == params[:currency] || session[:currency] }.try(&:last)
session.merge!(values || default)