2012-04-24 5 views
1

私はSinatraからRailsに来ています。私の問題は、ユーザーアカウントを作成した後、/ publicフォルダ内のindex.htmlページに移動しただけで、他のルートにアクセスできない場合は、ユーザーをサインアウトできず、別のルートを追加できないということですユーザー。Devise 2.0.4、Rails 3.2.3 - ユーザーアカウントを作成した後、私はルートにリダイレクトされ、他のルートにアクセスすることはできません。

私はユーザーモデルと認証を管理するためにdevise gemを使用しています。宝石をインストールした後、私はdevise githubページの指示に従った。

すなわち:

rails generate devise:install 

私も '設定/環境/ development.rb' ファイルに追加

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

と、私は '設定/ routes.rbを' ファイルに

を追加しました
root :to => "home#index" 

と 'app/views/layouts/application.html.erb'ファイルに追加しました

<p class="notice"><%= notice %></p> 
<p class="alert"><%= alert %></p> 

は、その後、私はここで

rails generate devise User 

そして最後に

rake db:migrate 

を走った私のユーザモデルが

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me 
    # attr_accessible :title, :body 
end 

ですそれから私は "/ユーザ/ sign_up" にナビゲートし、私が入りました電子メールとパスワードを入力した後、パブリックフォルダのindex.htmlページにリダイレクトされました。

問題はちょうどそこに詰まっているようです。 '/ユーザー/ sign_out' 利回り

Routing Error 

No route matches [GET] "https://stackoverflow.com/users/sign_out" 
Try running rake routes for more information on available routes. 

そして 'すくいルート' 利回りを実行している

new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 
        root  /       home#index 

'/ユーザー/ sign_up' のように思える現用ルートでなければなりません。

電子メールサービスの設定がなく、このアカウントがトラフの電子メールの検証を試みているという問題があるのでしょうか?もしそうなら、それをどうやって無効にするのですか?

ありがとうございます!もっと情報が必要なのか、何かを明らかにするために私に教えてください。

=============== UPDATE ===================

に 'ユーザ/編集' ルート問題はおそらく、 'users/sign_out'のために設定されているルートがDELETEルートであるという事実にあると考えられます。私はこれに関する用語を忘れていますが、GETルートからDELETEルートを作成するには何らかのトリッキーがあることを知っています。それで私の問題がどこにあるのでしょうか?

+0

は、あなたが最初のステップとして、パブリックフォルダ内の 'index.html'ファイルを削除する必要が私のためにうまく働いたサイト、それがでした。 – Robin

+0

ステップ1完了。ここで、ルーティングエラー 初期化されていない定数HomeController goto localhost:3000 – wuliwong

+0

インデックス付きのHomeController(app/controllers/home_controller.rb内)を作成する必要があります。使用可能なルートの詳細については、rakeルートを実行してみてください。アクション、およびapp/views/home(/index.html.erb)に関連付けられているビューが含まれます。 – Robin

答えて

1

をあなたがここでの2つのいずれかを行うことができます。

、このような何かログアウトを行うためのリンクを作成します。上記の例では、https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routesからである

devise_for :users, :skip => [:sessions] 
    as :user do 
     get 'signin' => 'devise/sessions#new', :as => :new_user_session 
     post 'signin' => 'devise/sessions#create', :as => :user_session 
     get 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session 
    end 

<%= link_to "Logout", destroy_user_session_path, method: :delete %>

またはあなたのroutes.rbファイルにこのような追加のルートを追加します

+0

私男!....... – wuliwong

0

サインアウトするには、あなたが呼び出しする必要があります。

destroy_user_session_path 

店舗セッションを考案し、DELETEは自分のセッションを削除します。

ルーティングエラーの場合、HomeControllerをポストできますか?

そしてeditのために、あなたが呼んでいる:

edit_user_registration_path 
+0

'rake routes'は私のルートがあなたの言う通りに設定されていることを確認しているようですが、そこからどこに行くのか分かりません。 – wuliwong

+0

私は '<%= link_to" Sign Out "、destroy_user_session_path%>'を追加し、 "Sign Out"リンクをクリックすると私の更新に追加されたルートのないエラーを示す/ users/sign_outになります。 – wuliwong

0

私はこの問題を抱えていましたが、サイトなどを探すのではなく私はここで停止し、上に示したコードのいずれも下記に表示されたときに感謝

devise_for :users, :skip => [:sessions] 

as :user do 
get 'signin' => 'devise/sessions#new', :as => :new_user_session 
post 'signin' => 'devise/sessions#create', :as => :user_session 
get 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session 
end 
+0

あなたはおそらくこれをコメントとして追加してください。質問に対する答えではありません。しかし、うれしいことにstackoverflowは素晴らしいです! – wuliwong

関連する問題