私はroutes.rbファイルにこのデバイスルートを持っています:
app::Application.routes.draw do
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" } do
delete "/logout" => "devise/sessions#destroy"
get "/login" => "devise/sessions#new"
get "/sign_up" => "devise/registrations#new"
get "/settings" => "devise/registrations#edit"
get "/recover_password" => "devise/passwords#new"
get "/confirm_account" => "devise/confirmations#new"
end
end
match '*path', to: redirect("/#{I18n.default_locale}/%{path}")
match '', to: redirect("/#{I18n.default_locale}")
end
http://localhost:3000/es
プロジェクトではスペイン語とhttp://localhost:3000/en
英語に使用しています。
に移動しhttp://localhost:3000/en/sign_up
て新しいユーザーを作成しようとして失敗した場合、リダイレクトはに移動しますhttp://localhost:3000/en/users
切り替え言語で言語を変更しようとすると、ブラウザでusers#indexアクションにリダイレクトするため、このリダイレクトは間違っています。
http://localhost:3000/en/sign_up
またはにリダイレクトする必要がありますhttp://localhost:3000/es/sign_up
私はregistrations_controller.rbで作成するdeviseアクションをオーバーライドしました
class RegistrationsController < Devise::RegistrationsController
def create
build_resource
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with({}, :location => after_sign_up_fails_path_for(resource))
end
end
private
def after_sign_up_fails_path_for(resource)
sign_up_path
end
end
ここでの問題は、フィールドフォームにエラーが表示されないことです。つまり、アプリはフォームフィールドにエラーを表示しません。devise_error_messagesは空です。
どうすればこの問題を解決できますか?
どうもありがとうございます