1

私はSinatraからRailsに来ていますが、Railsはまだかなり新しいです。私の問題は、ユーザーアカウントを作成した後、/ publicフォルダーのindex.htmlページに移動し、他のルートにアクセスできないように見えることです。ユーザーをサインアウトできず、別のルートを追加できません。ユーザー。

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

すなわち:

rails generate devise:install

'config / environment/development.rb'ファイルにも追加しました

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

'config/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

次に、「/ users / sign_up」に移動し、電子メールとパスワードを入力した後、パブリックフォルダーのindex.htmlページにリダイレクトされました。

問題は、私がそこに立ち往生しているように見えることです。'/ users / sign_out'は、

Routing Error

No route matches [GET] "/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

'/ users/sign_up'が機能するルートのようです。

問題は、電子メールサービスが設定されておらず、このアカウントが電子メールを介して検証されようとしていることであるかどうか疑問に思っていますか?もしそうなら、どうすればそれを無効にできますか?

ありがとう!さらに情報が必要な場合、または何かを明確にするために私に知らせてください。

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

'users / edit'ルートは機能しますが、おそらく問題は'users/sign_out'用に設定されたルートがDELETEルートであるという事実にあると思います。これについての用語を忘れましたが、GETルートからDELETEルートを作成することにはある種のトリックがあることを知っています。それで、これは私の問題がどこにあるのですか?

4

3 に答える 3

1

ここでは、次の 2 つのいずれかを行うことができます。

次のように、ログアウトを行うためのリンクを作成します。

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

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

    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

上記の例はhttps://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routesからのものです

于 2012-04-24T20:38:34.577 に答える
0

サインアウトするには、次のように電話する必要があります。

destroy_user_session_path

Devise はセッションを保存し、セッションをDELETE削除するだけです。

ルーティング エラーについては、HomeController を投稿していただけますか?

そして、editあなたは電話していますか:

edit_user_registration_path
于 2012-04-24T19:55:26.547 に答える
0

数分前、私はこの問題を抱えていました。サイトやサイトを探す代わりに、ここで停止し、上記のコードの1つが下に表示されているのがうまくいきましたありがとう

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
于 2012-05-22T01:55:24.810 に答える