4

无法弄清楚这里出了什么问题。按照设计设置说明,谷歌搜索了我能想到的一切,仍然没有运气。

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,重置服务器,你有什么。仍然无法弄清楚我哪里出错了。我什至还有另一个具有相同设置的基本应用程序,梳理源代码似乎我已经正确完成了所有操作,只是看不到问题所在。

4

3 回答 3

3

基本上,您的错误意味着您的用户模型中没有email列(或 attr_accessor)。

我猜您使用的是 Devise < 2.0,现在您使用的是最新版本。

自 2.0 起,Devise 不再将列自动包含到您的模型中,请参阅此页面了解更多信息

于 2012-09-15T21:24:22.910 回答
1

显然你没有表格中的username列。users所以首先创建这个。

rails g 迁移 add_username_to_users 用户名:字符串:uniq

然后运行rake db:migrate。现在您有一个用户名列,但它不允许作为强参数,因此在应用程序控制器中包含以下行。

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
于 2017-02-08T06:44:35.810 回答
0

在您的用户模型中提及电子邮件列作为 attr_accessor

于 2012-09-16T16:46:24.710 回答