1

foo.persisted? == true文書は、いつ、どのように請求できfoo.class.count == 0ますか?
さらに重要なことは、ドキュメントを本当に永続化するにはどうすればよいでしょうか?

更新:Mongo::Foo.create()コントローラーから呼び出すと、カウントがインクリメントされます。それが予想されます。別のモジュール/クラス内からcreate、またはnewおよび を呼び出しても、カウントは増加しません。save

更新:変更を試みましたnew/saveへの呼び出しcreate

更新:私も試しました@foo_class.with(collection: "mongo_foos").create

[42] pry(#<FoosController>)> foo.class
=> Mongo::Foo
[43] pry(#<FoosController>)> foo.persisted?
=> true
[44] pry(#<FoosController>)> Mongo::Foo.count
=> 0
[47] pry(#<FoosController>)> foo.id
=> "5081a1a786ddc8e035000021"
[48] pry(#<FoosController>)> foo
=> #<Mongo::Foo _id: 5081a1a786ddc8e035000021, _type: nil, foo_daddy_id: nil, old_foo_daddy_id: 219, member_id: "F008AR", unix_time: nil, date_time: 2012-10-19 13:50:54 UTC, submitted: nil, json: nil>

ドキュメント クラスの定義方法は次のとおりです。

module Mongo
  class Foo
    include Mongoid::Document

    field :foo_daddy_id
    field :old_foo_daddy_id, type: Integer
    field :member_id,  type: String
    field :unix_time,  type: Integer
    field :date_time,  type: DateTime
    field :submitted,  type: Integer
    field :json,       type: Hash

    belongs_to :foo_daddy, class_name: "Mongo::FooDaddy"
    embeds_many :foo_dumplings, class_name: "Mongo::FooDumpling"

  end
end

ドキュメントは で作成されていfoo.new(params); foo.saveます:

module FooThingy
  module Foo
    class Create < ::FooThingy::Base

      def initialize(options)
        # Sets instance variables used below
      end

      def execute!
        @foo = @foo_class.new({
          date_time: DateTime.strptime(@params["submitted_timestamp"], "%m-%d-%Y %H:%M:%S"),
          member_id: (@params[:member_id].present? ? @params[:member_id] : nil),
          old_foo_daddy_id: @params[:old_foo_daddy_id]
        })

        embed_foo_dumplings

        if @foo.save
          return FooThingy::Result.new(success: true, data: { foo: @foo })
        else
          return FooThingy::Result.new(success: false, data: { foo: @foo })
        end
      end

      private
      def embed_foo_dumplings
        # Embeds foo_dumplings
      end

    end
  end
end

ドキュメントを作成するためにそのモジュールを呼び出す場所は次のとおりです。

class FoosController < ApplicationController
  def create
    foo_creator = FooThingy::Foo::Create.new(params: params, foo_class: Mongo::Foo)
    foo = foo_creator.execute!
    foo = foo.data[:foo]
    binding.pry
  end
end
4

1 に答える 1

0

この問題は、見た目ほど面白くないと思います。config/mongoid.yml新しいデータベースを指定するように変更しましたが、すべてが期待どおりに動作します。この問題は、32 ビット MongoDB インストールの制限が原因である可能性があります。

于 2012-10-19T22:36:34.230 に答える