设计未定义的方法`email'

时间:2012-07-26 17:59:54

标签: ruby-on-rails-3 devise

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

attr_accessible :name, :roles, :email

答案 2 :(得分:0)

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

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