Ruby on rails Mongoid更新_属性未持久化

Ruby on rails Mongoid更新_属性未持久化,ruby-on-rails,mongoid,Ruby On Rails,Mongoid,我正在运行一个update\u attributes命令,以在rails控制台中的一个用户文档中添加两个新添加的字段,并在运行的命令上显示true,但数据库中没有任何内容 User.last(简化): user.rb field :first_name field :last_name field :nickname # just added this field :email # just added this mongoid gem版本: rails (3.0.3) mon

我正在运行一个
update\u attributes
命令,以在rails控制台中的一个用户文档中添加两个新添加的字段,并在运行的命令上显示
true
,但数据库中没有任何内容

User.last(简化):

user.rb

  field :first_name
  field :last_name
  field :nickname # just added this
  field :email # just added this
mongoid gem版本:

rails (3.0.3)
mongoid (2.0.0.beta.20)

我怀疑当你得到NoMethodError时,你有一个空的用户集合。 以下工作适用于轨道3.2.3、Mongoid 2.4.10。 我建议复制并运行测试,以便您对正在测试的每件事情都有一个已知的环境

class User
  include Mongoid::Document
  field :first_name
  field :last_name
  field :nickname
  field :email
end
测试/单元/用户_test.rb

require 'test_helper'

class UserTest < ActiveSupport::TestCase
  def setup
    User.delete_all
  end

  test "update_attribute" do
    User.create(first_name: 'Jason', last_name: 'Johnson')
    assert_equal(1, User.count)
    p User.last
    User.last.update_attribute(:nickname, 'Josh')
    p User.last
    User.last.update_attributes(nickname: 'Josh', email: 'josh@gmail.com')
    p User.last
  end
end
需要“测试助手”
类UserTest
测试输出

Run options: --name=test_update_attribute

# Running tests:

#<User _id: 4fc63ff5e4d30b08ca000001, _type: nil, first_name: "Jason", last_name: "Johnson", nickname: nil, email: nil>
#<User _id: 4fc63ff5e4d30b08ca000001, _type: nil, first_name: "Jason", last_name: "Johnson", nickname: "Josh", email: nil>
#<User _id: 4fc63ff5e4d30b08ca000001, _type: nil, first_name: "Jason", last_name: "Johnson", nickname: "Josh", email: "josh@gmail.com">
.

Finished tests in 0.019296s, 51.8242 tests/s, 51.8242 assertions/s.
运行选项:---name=test\u update\u属性
#运行测试:
#
#
#
.
以0.019296s、51.8242测试/秒、51.8242断言/秒的速度完成测试。

您运行Mongoid 2.0.0测试版有什么原因吗?当前(稳定的)版本是2.4.10。如果我尝试更新属性(:_type=>“ClassName”),那么它不起作用…但是它可以与更新属性(:_type,“ClassName”)一起工作。
require 'test_helper'

class UserTest < ActiveSupport::TestCase
  def setup
    User.delete_all
  end

  test "update_attribute" do
    User.create(first_name: 'Jason', last_name: 'Johnson')
    assert_equal(1, User.count)
    p User.last
    User.last.update_attribute(:nickname, 'Josh')
    p User.last
    User.last.update_attributes(nickname: 'Josh', email: 'josh@gmail.com')
    p User.last
  end
end
Run options: --name=test_update_attribute

# Running tests:

#<User _id: 4fc63ff5e4d30b08ca000001, _type: nil, first_name: "Jason", last_name: "Johnson", nickname: nil, email: nil>
#<User _id: 4fc63ff5e4d30b08ca000001, _type: nil, first_name: "Jason", last_name: "Johnson", nickname: "Josh", email: nil>
#<User _id: 4fc63ff5e4d30b08ca000001, _type: nil, first_name: "Jason", last_name: "Johnson", nickname: "Josh", email: "josh@gmail.com">
.

Finished tests in 0.019296s, 51.8242 tests/s, 51.8242 assertions/s.