2

每当我点击登录按钮时,我都会收到以下错误:

NoMethodError in Devise/sessions#new

Showing /Users/chanel.n/svn-    work/gwb/trunk/PMOCCU/ProcessEnforcer/app/views/devise/sessions/new.html.erb where line #5 raised:

undefined method `email' for #<User id: nil, name: nil, created_at: nil, updated_at: nil>
Extracted source (around line #5):

2: 
3: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
4:   <div class="field"><%= f.label :email %><br />
5:   <%= f.email_field :email %></div>
6: 
7:   <div class="field"><%= f.label :password %><br />
8:   <%= f.password_field :password %></div>
Rails.root: /Users/chanel.n/svn-work/gwb/trunk/PMOCCU/ProcessEnforcer

Application Trace | Framework Trace | Full Trace
app/views/devise/sessions/new.html.erb:5:in `block in    _app_views_devise_sessions_new_html_erb___4179931318693150703_70215900182100'
app/views/devise/sessions/new.html.erb:3:in `_app_views_devise_sessions_new_html_erb___4179931318693150703_70215900182100'

这是我的用户模型,其中包括电子邮件:

class User < Role
has_and_belongs_to_many :roles

attr_accessible :name, :roles

# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :lockable, :timeoutable, :trackable, :validatable, :token_authenticatable

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

 validates_presence_of :email

end

无论出于何种原因,它都无法识别电子邮件。

有没有其他人遇到过这个问题?

4

3 回答 3

0

默认情况下,设计使用电子邮件作为登录名,因此它要求您拥有 :email 和 :encrypted_pa​​ssword 字段。

您的用户模型中都没有。因此,您需要添加这些字段。

于 2012-07-26T19:26:14.597 回答
0

您的电子邮件字段在用户模型中不可访问,您应该使用以下方法使其可访问:

attr_accessible :name, :roles, :email
于 2012-07-26T22:02:50.133 回答
0

其他建议与我的情况无关。我的设计版本已经过时了。升级到 3.2.4 为我修复了它。

主要问题似乎是设计生成的迁移在新版本中有所不同。

于 2014-07-27T16:53:32.907 回答