class Topic
include Mongoid::Document
#....
field :public_at, type: DateTime
#...
end
Topic.collection.insert([{public_at: "2013-10-30 11:45:56"}])
$> Topic.first
Hirb エラー: "2013-10-30 11:45:56" の未定義のメソッド `getlocal':文字列
時間に変換されませんでした。
class Topic
include Mongoid::Document
#....
field :public_at, type: DateTime
#...
end
Topic.collection.insert([{public_at: "2013-10-30 11:45:56"}])
$> Topic.first
Hirb エラー: "2013-10-30 11:45:56" の未定義のメソッド `getlocal':文字列
時間に変換されませんでした。
問題は、バッチ (ハッシュの配列) 挿入の Moped ドライバー レベルで時刻が必要な場所に文字列を挿入していることです。MongoDB は、Moped ドライバーによって Ruby Time にマップされる BSON タイプの UTC 日時をサポートします。次のテストは、Time#parse を使用して String を Time に変換した結果を示しています。public_at フィールドは、トピックのモデル レベルで指定された DateTime であることに注意してください。これが役立つことを願っています。
テスト/ユニット/topic_test.rb
require 'test_helper'
class TopicTest < ActiveSupport::TestCase
def setup
Topic.delete_all
puts
end
test "0. mongoid version" do
puts "Mongoid::VERSION:#{Mongoid::VERSION}\nMoped::VERSION:#{Moped::VERSION}"
end
test "batch insert" do
time = Time.parse("2013-10-30 11:45:56")
Topic.collection.insert([{public_at: time}])
assert_equal 1, Topic.count
assert_equal DateTime, Topic.first.public_at.class
p Topic.first
end
end
$レーキテスト
Run options:
# Running tests:
[1/2] TopicTest#test_0._mongoid_version
Mongoid::VERSION:3.1.5
Moped::VERSION:1.5.1
[2/2] TopicTest#test_batch_insert
#<Topic _id: 528c23e68ce7aa1e667734de, public_at: 2013-10-30 15:45:56 UTC>
Finished tests in 0.051755s, 38.6436 tests/s, 38.6436 assertions/s.
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips