Как мне справиться с постоянным переключением валют во всем приложении? - PullRequest
0 голосов
/ 24 июня 2019

Я поддерживаю 3 валюты в своем приложении GBP, JMD, USD.

Когда пользователь выбирает валюту на одной странице, он перезагружает страницу и соответственно устанавливает переменную 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.

Чего мне не хватает?

1 Ответ

1 голос
/ 25 июня 2019

С отображением было бы намного проще, чем с большим количеством 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...