每当我点击登录按钮时,我都会收到以下错误:
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
无论出于何种原因,它都无法识别电子邮件。
还有其他人遇到过这个问题吗?
答案 0 :(得分:0)
默认设计使用电子邮件作为登录名,因此它要求您拥有:email和:encrypted_password字段。
您的用户模型中没有。因此,您需要添加这些字段。
答案 1 :(得分:0)
您的电子邮件字段无法在用户模型中访问,您应该使用以下方式访问它:
attr_accessible :name, :roles, :email
答案 2 :(得分:0)
其他建议与我的情况无关。我的版本设计已经过时了。升级到3.2.4为我修好了。
主要问题似乎是设计的迁移在较新版本中有所不同。