0

私は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は空です。

どうすればこの問題を解決できますか?

どうもありがとうございます

4

1 に答える 1

2

(私の答えは間違っていました-私はそれを変更しました)

失敗時にリダイレクトする代わりに、次のように考えます。

respond_with({}, :location => after_sign_up_fails_path_for(resource))

同じ失敗したリソースで同じページに留まりたい:

render :action => 'new'

元の行は同じ効果を持つはずですが:

respond_with resource
于 2012-04-22T14:16:29.663 に答える