1

Railsコンソールのユーザードキュメントの1つに2つの新しい追加フィールドを追加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

モンゴイド宝石のバージョン:

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

1 に答える 1

0

NoMethodError が発生したとき、空の users コレクションがあったと思われます。以下は、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 に答える