无法弄清楚这里有什么问题。跟着Devise设置说明,用Google搜索我能想到的一切,但仍然没有运气。
undefined method `email' for #<User id: nil, created_at: nil, updated_at: nil>
Extracted source (around line #7):
4: <%= devise_error_messages! %>
5:
6: <div><%= f.label :email %><br />
7: <%= f.email_field :email %></div>
8:
9: <div><%= f.label :password %><br />
10: <%= f.password_field :password %></div>
这是我的用户模型:
class User < ActiveRecord::Base
rolify
# Include default devise modules. Others available are:
# :token_authenticatable, :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
validates_presence_of :email
validates_uniqueness_of :email, :case_sensitive => false
end
我运行rake db:migrate,重置服务器,你有什么。仍然无法弄清楚我哪里出错了。我甚至有另一个基本应用程序使用相同的设置,梳理源代码似乎我已经完成了所有事情,只是看不出问题。
答案 0 :(得分:3)
基本上,您的错误意味着您的用户模型中没有email
列(或attr_accessor)。
我猜你用的是Devise&lt; 2.0现在使用的是最新版本。
自2.0以来,Devise不再自动将列添加到您的模型中see this page for more info。
答案 1 :(得分:1)
显然,username
表中没有users
列。首先创建此列。
rails g migration add_username_to_users username:string:uniq
然后运行rake db:migrate
。现在您有一个用户名列,但不允许它作为强参数,因此在Application controller中包含以下行。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
added_attrs = [:username, :email, :password, :password_confirmation, :remember_me]
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
devise_parameter_sanitizer.permit :account_update, keys: added_attrs
end
end
答案 2 :(得分:0)
提及电子邮件列作为用户模型中的attr_accessor