Mongoid update_attributes不会持久化

时间:2012-05-19 23:01:01

标签: ruby-on-rails mongoid

我在我的rails控制台的一个用户文档中运行update_attributes命令添加两个新添加的字段,并且在运行的命令上显示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'

user.rb

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

mongoid gem version:

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

1 个答案:

答案 0 :(得分:0)

我怀疑当你得到NoM​​ethodError时你有一个空的用户集合。 以下适用于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.