4

Mongodb (Mongoid を使用) に裏打ちされた ruby​​/rails アプリに取り組んでいます。Rails アプリケーションのコンテキスト内では、すべてが問題なく動作しますが、Rails 環境外のオブジェクトにもアクセスしています。Rails 環境では、オブジェクトの ID を次の形式のハッシュ以外の形式で返すのに問題があります。

{"$oid"=>"4e0005b78ba4db213500001f"}

単なる ID 文字列ではなく、BSON::ObjectId 型の値を取得しているため、表示されていることがわかりました。Rails 環境を要求することに加えて、この作業を行っているファイルで bson を明示的に要求することも試みました。

require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require "bson"

id を含む文字列として単純に値を取得する必要があります。これは他の場所ではデフォルトのようですが、この 1 つのケースではそうです。奇妙なことに、この動作は私の開発環境でのみ発生します (私のチームの他のメンバーはこの問題を抱えていません)。

私はMongodbを初めて使用するため、本当に明白なものが欠けている可能性があるという必須の免責事項。

ありがとう!

4

1 に答える 1

7

オブジェクトで to_s を呼び出してみてください。irb で:

ruby-1.9.2-p180 > p = Project.last #=> #<Project _id: 4e00e77d399a46759d000002, _type: nil, version: 1, created_at: 2011-06-21 18:48:34 UTC, updated_at: 2011-06-21 18:48:34 UTC, name: "Testing MongoDB", client_id: 3, client_name: nil, group_id: 35, requestor_id: 14, requestor_name: "Test Client User", requestor_phone: "", creator_id: 2, creator_name: "Some Guy", manager_id: 23, manager_name: "Some Other Guy", manager_phone: "", manager_email: "", active: true, status: "open", default_hourly_cost: "0.0", default_hourly_charge: "0.0", default_material_markup: "0.35", add_email_internal: "", add_email_client: "", client_po_number: "", client_ticket_number: "", date_requested: nil, date_requested(1i): "2011", date_requested(2i): "6", date_requested(3i): "21">
ruby-1.9.2-p180 > p.id.to_s #=> "4e00e77d399a46759d000002"

それでもうまくいかない場合は、environment.rb を投稿していただけますか?

于 2011-06-21T21:42:20.353 に答える