【问题标题】:Add custom column to User Model using rails Clearance gem使用 rails Clearance gem 将自定义列添加到用户模型
【发布时间】:2012-03-21 21:51:21
【问题描述】:

我使用 Clearance gem 将身份验证添加到我的网站。 标准用户模型如下所示:

class User < ActiveRecord::Base
  include Clearance::User
end

现在我想向用户模型添加更多属性。 我创建了这个迁移:

class AddCustomernameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :customername, :string
  end
end

在 rake db:migrate 之后,数据库现在多了一个 :customername 列

下一步我编辑了用户模型文件,它看起来像这样:

class User < ActiveRecord::Base
  include Clearance::User
  attr_accessor :customername
end

下一步,我注册了一个新用户,并使用 sqlite 数据库浏览器在该用户的客户名称字段中添加了测试字符串“charly”。

在我的控制器中,我现在想创建一个用户对象并将其打印出来以查看是否存在所有数据。

thisUser = User.find(current_user.id)
puts thisUser.inspect

控制台输出是:

#<User id: 1, email: "test@test.de", encrypted_password: "0494a9b3b692acaea96ab57bed500adf26dbafa5", salt: "75c889d099438476204ce46b9cb406fb1f73423c", confirmation_token: nil, remember_token: "907b9bd600246d0b8dcc06a782457665f614b368", created_at: "2012-03-21 20:59:44", updated_at: "2012-03-21 21:12:59", customername: nil>

所以客户名称为零。不知何故,该字段的数据没有正确地从数据库中提取出来。

我做错了什么?

抱歉,我是 Rails 初学者。可能是一件很简单的事情,但是我努力了一天,google了一天也没能成功,所以我求助于堆栈溢出的智慧。 谢谢大家。

【问题讨论】:

    标签: activerecord ruby-on-rails-3.2 clearance


    【解决方案1】:

    不要在用户模型中使用 attr_accessor ,而是使用 attr_accesible :customername ,它会起作用。因为没有 attr_accessible,数据将不会保存在您的数据库中,这就是您获得该字段的 nil 值的原因。

    【讨论】:

      【解决方案2】:

      您确定您在使用 sqlite 数据库浏览器时正在编辑正确的数据库吗?如果是这样,我会尝试修改您的用户创建代码以包含客户名称,而不是使用单独的工具添加它并查看是否有帮助。

      【讨论】:

      • 试过这个:thisUser = User.find(current_user.id) thisUser.customername = "Harry" puts thisUser.inspect 即使我这样做了 customername 仍然是 nil
      • 我能够使用另一个身份验证 gem 来完成它,但我仍然会对这里出了什么问题感兴趣
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2019-02-05
      • 2012-11-30
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多