2012-01-15 11 views
1

が問題と認知症行く/セッションを考案するルートを設定しようとすると、ここにルートマッピングエラーで#新しい結果

:-(私の要件は、ユーザーが訪問myappの場合は、

  1. です。

  2. ユーザーがログインしていないときに、テスト時に自分のアカウントにアクセスしようとすると、私のアプリのルートはプロモーションページ&サインアップフォームにデフォルト設定されています。 myapp.comは彼らに向けられますtest.myapp.com/users/sign_in-aka-devise/sessions#new

  3. ユーザがログインしている場合(作成者)、test.myapp.comにアクセスすると、アプリケーションのルートがアプリケーションダッシュボードになります。ここで

は現在、私は次のことを持って、私は私のroutes.rbをして

constraints(Subdomain) do 
    authenticated do 
    root :to => 'dashboard#index' 
    end 
    root :to => 'devise/sessions#new' 
end 
root :to => 'promo_pages#index' 

を使用しようとしていますものです、あなたは工夫ビットが含まれていないことに注意します。

constraints(Subdomain) do 
    authenticated do 
    root :to => 'dashboard#index' 
    end 
end 
root :to => 'promo_pages#index' 

後者は私の問題は、最初の訪問test.myapp.com彼らはリダイレクトされますが、ログインされていないユーザーがtest.myapp.com/users/sign_inすると、エラーメッセージが表示されていると言ったときに "続行する前にサインインまたはサインアップする必要があります。これは、ダッシュボードページのログオン要件を強制しているためです。

しかし、ユーザーがページを初めて訪れたときにエラーメッセージが表示されることは望ましくありません。醜いので、エラーメッセージが表示されないように見えます。

ユーザーがログインしていない場合は、ログオンページに直接誘導され、エラー通知は表示されません。しかし、私が修正版を使用すると、次のようなことが起こります。 私はmyapp.comをよく訪れ、プロモーションページ にルーティングされますが、test.myapp.comにアクセスしようとするとブラウザに次のメッセージが表示されます

**Unknown action** 
Could not find devise mapping for path "/". Maybe you forgot to wrap your route inside the scope block? For example: devise_scope :user do match "/some/route" => "some_devise_controller" end 

私はクラッカーが何をすべきかを理解しようとしているので、私が間違っていることをアドバイスしてください。

Ps:私はstackoverflowとさまざまなグーグルで同じようなエラーを発見しましたが、解決策は私にとってはうまくいかないようです。私は、上記のエラーメッセージに問題の解決策があると思っていますが、それをどのように適用するのか分かりません。

最後に、上記のエラーのログエントリバージョンです。これは読みやすい形式です。

Started GET "/" for 127.0.0.1 at 2012-01-15 21:44:42 +0000 
    Processing by Devise::SessionsController#new as HTML 
[Devise] Could not find devise mapping for path "/". 
Maybe you forgot to wrap your route inside the scope block? For example: 

    devise_scope :user do 
     match "/some/route" => "some_devise_controller" 
    end 
Completed 404 Not Found in 1ms 

AbstractController::ActionNotFound (Could not find devise mapping for path "/". 
Maybe you forgot to wrap your route inside the scope block? For example: 

    devise_scope :user do 
     match "/some/route" => "some_devise_controller" 
    end 
): 

すべてのご協力ありがとうございます。更新


を読み取るための

おかげで私は「認証済み」のチェックが動作していないと思われることに気づきました。 正常に動作していて、作業設定の2番目のバッチを使用している場合は、test.myapp.comにアクセスしているログインユーザーは常にpromo_pagesに誘導されますが、現時点ではダッシュボードにアクセスできます。

私は工夫「認証済み」メソッドを見つけ、ここ https://github.com/plataformatec/devise/pull/1147

+0

これは解決されましたが、私はできるだけそれをするつもりですので、私はもう4時間回答を投稿できません。 –

答えて

1

私はそれが最初に私が工夫エラーを得ていた理由は、私が「内部の工夫ルートステートメントを配置するために必要なことだった、

は、[OK]を、ソートしてしまっていますdevise_for:users "ブロック

第2に、 誤った印象を受けていたため、スコープを含めることができなかったため、認証されたチェックが機能しませんでした。

これは最終的なコードです。レールのルーティングでは、優先順位は作成順序に基づいており、最初に作成される優先順位が最も高いことに注意してください。したがって、この場合、promo_pagesコントローラは、これまでに何も指定されていない場合にのみルートと見なされます。

constraints(Subdomain) do 
    authenticated :user do 
    root :to => 'dashboard#index' 
    end 

    unauthenticated :user do 
    root :to => 'devise/sessions#new' 
    end 
end 
root :to => 'promo_pages#index' 
3

制約なしでは、パス "/"エラーのためのdeviseマッピングが見つかりませんでした。この単純な追加によって修正されました。

devise_scope :user do 
    authenticated :user do 
     root :to => 'dashboard#index' 
    end 
    unauthenticated :user do 
     root :to => 'devise/sessions#new' 
    end 
    root :to => 'dashboard#index' 
end 
関連する問題