设计模型无法保存到数据库中
devise model cannot be saved into database
所以我有一个设计模型用户,我向其中添加了一些字段,如用户名、地址等。该模型如下所示:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
attr_accessor :username, :first_name, :last_name, :address
def profile(username)
User.find_by(:username => username)
end
end
然后我正在为这个模型编写 RSpec 测试。但是,当我将新用户记录添加到数据库中时,它失败了。这段代码看起来像这样:
require 'rails_helper'
RSpec.describe User, type: :model do
before(:all) do
User.create(email: "test@gmail.com", address: "nyc", first_name: "aa", last_name: "bb", username: "lol")
puts User.count
end
after(:all) do
User.destroy_all
end
it 'should return correct record when we query by username' do
user = User.find_by(username: "lol")
puts user
expect(user.address).eql? "nyc"
end
end
但是当我 运行 rails 规范时,table 的计数为零,因此创建方法似乎失败了。此外,它还引发了一个错误:“nil:NilClass”的“未定义方法‘地址’”。
我怀疑它是由设计引起的原因是当我在用户模型中注释掉由设计开始的行时,rspec 正常工作。
那么有人知道原因吗?我搜索了相关帖子,但其中 none 个帖子有我的情况。谢谢。
如果您想使用 Devise 创建用户,您需要为您的用户提供 password
。以下内容可能有效:
User.create(
email: "test@gmail.com",
address: "nyc",
first_name: "aa",
last_name: "bb",
username: "lol",
password: "something",
password_confirmation: "something",
)
提示:您无需在attr_accessor
中申报。您可以将其删除。并使用新的哈希样式
# old style
User.find_by(:username => username)
# new style
User.find_by(username: username)
所以我有一个设计模型用户,我向其中添加了一些字段,如用户名、地址等。该模型如下所示:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
attr_accessor :username, :first_name, :last_name, :address
def profile(username)
User.find_by(:username => username)
end
end
然后我正在为这个模型编写 RSpec 测试。但是,当我将新用户记录添加到数据库中时,它失败了。这段代码看起来像这样:
require 'rails_helper'
RSpec.describe User, type: :model do
before(:all) do
User.create(email: "test@gmail.com", address: "nyc", first_name: "aa", last_name: "bb", username: "lol")
puts User.count
end
after(:all) do
User.destroy_all
end
it 'should return correct record when we query by username' do
user = User.find_by(username: "lol")
puts user
expect(user.address).eql? "nyc"
end
end
但是当我 运行 rails 规范时,table 的计数为零,因此创建方法似乎失败了。此外,它还引发了一个错误:“nil:NilClass”的“未定义方法‘地址’”。
我怀疑它是由设计引起的原因是当我在用户模型中注释掉由设计开始的行时,rspec 正常工作。
那么有人知道原因吗?我搜索了相关帖子,但其中 none 个帖子有我的情况。谢谢。
如果您想使用 Devise 创建用户,您需要为您的用户提供 password
。以下内容可能有效:
User.create(
email: "test@gmail.com",
address: "nyc",
first_name: "aa",
last_name: "bb",
username: "lol",
password: "something",
password_confirmation: "something",
)
提示:您无需在attr_accessor
中申报。您可以将其删除。并使用新的哈希样式
# old style
User.find_by(:username => username)
# new style
User.find_by(username: username)