1

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

User.last(简化):

#<User _id: 4c77d555b1382g539f000022, first_name: "Jason", last_name: "Johnson"> 

我尝试运行的命令(遵循http://mongoid.org文档):

User.last.update_attributes(nickname: 'Josh', email: 'josh@gmail.com')
User.last.update_attribute(:nickname, 'Josh') # I get a NoMethodError: undefined method `update_attribute'

用户.rb

  field :first_name
  field :last_name
  field :nickname # just added this
  field :email # just added this

mongoid 宝石版本:

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

1 回答 1

0

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

class User
  include Mongoid::Document
  field :first_name
  field :last_name
  field :nickname
  field :email
end

测试/单元/user_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

测试输出

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.
于 2012-05-30T15:56:20.500 回答