1

我从 Sinatra 来到 Rails,对 Rails 还是很陌生。我的问题是,在创建用户帐户后,我只是被定向到 /public 文件夹中的 index.html 页面,并且似乎无法访问任何其他路由,我无法注销用户,也无法添加另一个用户。

我正在使用设计 gem 来管理我的用户模型和身份验证。安装 gem 后,我按照设计 github 页面上的说明进行操作。

IE:

rails generate devise:install

我还添加到“config/environments/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' 应该是一条可行的路线。

我想知道问题是否在于没有电子邮件服务设置并且该帐户正在尝试通过电子邮件进行验证?如果是这样,我该如何禁用它?

谢谢!如果您需要更多信息或让我澄清一些事情,请告诉我。

===============更新===================

'users/edit' 路由确实有效,我认为问题可能在于为 'users/sign_out' 设置的路由是 DELETE 路由。我忘记了这方面的术语,但我知道从 GET 路由中创建 DELETE 路由时存在某种诡计。那么这是我的问题所在吗?

4

3 回答 3

1

你可以在这里做两件事之一。

创建一个链接以进行注销,如下所示:

<%= 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

设计存储会话,并DELETE删除您的会话。

对于路由错误,您可以发布您的 HomeController 吗?

对于edit,您是否在致电:

edit_user_registration_path
于 2012-04-24T19:55:26.547 回答
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
于 2012-05-22T01:55:24.810 回答