【问题标题】:devise model cannot be saved into database设计模型无法保存到数据库中
【发布时间】:2021-12-17 12:48:01
【问题描述】:

所以我有一个设计模型用户,我添加了一些字段,如用户名、地址等。模型如下所示:

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 spec 时,表的计数为零,因此 create 方法似乎失败了。此外,它引发了一个错误:“nil:NilClass 的未定义方法‘地址’”。
我怀疑它是由设计引起的原因是当我在用户模型中注释掉由设计开始的行时,rspec正常工作。
那么有人知道原因吗?我搜索了相关的帖子,但没有一个有我的情况。谢谢。

【问题讨论】:

    标签: ruby-on-rails rspec devise rspec-rails


    【解决方案1】:

    如果您想使用 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)
    

    【讨论】:

    • 谢谢丹!完美解决了我的问题。
    猜你喜欢
    • 2021-01-25
    • 2012-12-18
    • 2021-12-09
    • 2017-10-11
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多