Переключение локали после неверного POST - PullRequest
0 голосов
/ 22 июля 2011

Я озадачен следующей проблемой: в моем веб-приложении пользователи могут выбрать свой язык из выпадающего списка.После выбора фрагмент Javascript берет текущий URL, заменяет в нем старую подстроку локали новой строкой локали и устанавливает window.location в новый URL.Это прекрасно работает, если URL-адрес является результатом запроса GET.

Моя проблема возникает, когда пользователь публикует форму и возвращает ошибку проверки.URL-адрес теперь является URL-адресом POST, который (в моем случае) не работает с GET-запросом.Следовательно, если пользователь теперь решит переключить язык, на сервер будет отправлен недопустимый запрос GET.

Есть идеи, как решить эту проблему?

Чтобы быть более конкретным: I 'Я столкнулся с этой проблемой в Rails 3.0.9 в регистрационной форме Devise (1.4.2)

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Я часто пишу свои собственные маршруты, чтобы избежать именно той проблемы, которую вы описываете. Я думаю, что это большая ошибка в маршрутизации Rails.

Возможно, вы сможете изменить маршруты Devise и остальные маршруты ресурсов, чтобы URL-адреса GET и POST выглядели одинаково. Вот пример того, что я имею в виду.

  scope '/posts' do
    get '/:id/edit' => "posts#edit", :as => "edit_posts"
    post '/:id/edit' => "posts#update", :as => "update_posts"
  end

Тем не менее, немного сложнее делать такие вещи.

Вы всегда можете отключить выбор локали для страниц, где у вас есть проблемы.

0 голосов
/ 23 июля 2011

@ WizardofOgz спасибо, что поставили меня на правильный путь.Я добавляю этот ответ, чтобы я мог вставить некоторый код, который я не могу добавить в комментарий, но я приму ваш ответ.

Я нашел этот связанный пост специально для Devise.Я проверил это на маршрутах сброса пароля, и это, кажется, работает нормально (хотя я думаю, что это еще не завершено):

devise_for :user, :path_names => { :sign_up => "register", :sign_in => 'login', :sign_out => 'logout' }, :skip => [:passwords] do
  scope :controller => 'devise/passwords' do      
    post :create, :path => 'user/password/new', :as => :user_password
    get  :new, :path => 'user/password/new' , :as => :new_user_password
  end
end
0 голосов
/ 22 июля 2011

Вы можете проверить с помощью javascript, есть ли на странице классифицированный элемент .fieldWithError. Если это так, вы можете быть уверены, что последний запрос был POST. В этом случае вам придется изменить атрибут 'action' для формы (изменить локаль) и отправить его снова.

Вы не можете получить доступ к методу HTTP текущего ответа с помощью JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...