0

ユーザーが選択した実際の言語のDevise登録フォームparamsを送信し、params [:lang]としてルートに保持する必要があります。

reCaptchaを検証しているのでカスタムコントローラーを持っています(その部分は機能します)。

だから私は私のルートにあります:

    devise_for :users, controllers: { registrations: 'registrations' }

    devise_for :users do
         root :to => "devise/registrations#new"
         get "/" => "devise/registrations#new"
         post '/' => 'registrations#new', :as => :new_user_registration 
         match '/', :to => 'devise/registrations#new'
         get "/logout", :to => "devise/sessions#destroy", :as => "logout"
    end

    #Sign
    match '/:lang/:sec/sign' => 'frontend#sign', :as => :sign

私の登録フォーム:

   <%= form_for(resource, :as => resource_name, :url => 
   registration_path(resource_name, :lang => params[:lang], :sec => params[:sec])) 
   do |f| %>

そして、私は2つのコントローラーを持っています。1つはユーザー用、もう1つは管理者用です。ログインに成功すると、DeviseはユーザーコントローラーであるRestringidoに移動し、ユーザーが管理者として検証されるのか、一般ユーザーとしてのみ検証されるのか疑問に思います。

私のrestringidoコントローラーでは:

    class RestringidoController < ApplicationController

    before_filter :verify_is_user

    def verify_is_user
       if current_user.try(:admin?)
       #redireccionar a backend
       redirect_to :controller => "backend", :action => "index"
    elsif current_user
       #mantenerte en este controlador
    else
       redirect_to :controller => "frontend", :action => "sign"
    end

そして、管理者向けの私のバックエンドコントローラー:

    before_filter :verify_is_admin

    def verify_is_admin
       if current_user.admin?
    else
       redirect_to root_path
    end

そして、エラーは次のとおりです。

    No route matches {:controller=>"frontend", :action=>"sign"}
4

1 に答える 1

0

あなたのルート:

match '/:lang/:sec/sign' => 'frontend#sign', :as => :sign

変数を設定する必要があり:lang、デフォルト値を指定していません。したがって、コントローラーでのこの呼び出し:

redirect_to :controller => "frontend", :action => "sign"

:lang変数を指定していないため、ルートの一致に失敗します

これを修正する:langには、コントローラーに値を指定します。例:

redirect_to :controller => "frontend", :action => "sign", :lang => (params[:lang] || DEFAULT_LANG)

または、ルートにデフォルト値があります。

于 2012-09-12T00:56:00.070 に答える