1

私はいくつかのインベントリを行うために mongomapper を使用して単純な Rails アプリを作成しています。基本的に、交換ユニットがどうあるべきかを定義できるようにしたいと考えています。

だから私はモデルを持っています:

class Replacement
  include MongoMapper::Document
  set_collection_name 'asset_replacements'
  key :device, String
  one :current, :class_name => 'Asset'
  one :replacement, :class_name => 'Asset'
end

class Asset
  include MongoMapper::Document
  set_collection_name 'assets__collection'
  key :_id, Mongo:ObjectId
  key :vendor, String
  key :model, String
end

そして、私はform.erbを持っています:

<%= form_for(@replacement) do |f| %>
  <div class="field">
    <%= f.label :device %><br />
    <%= f.text_field :device %>
  </div>
  <div class="field">      
    <%= f.label :current_id %><br />
    <%= f.collection_select :current, Asset.sort(:model), :id, :model %>
  </div>
  <div class="field">      
    <%= f.label :replacement_id %><br />
    <%= f.collection_select :replacement, Asset.sort(:model), :id, :model %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

コントローラーは次のとおりです。

def create
  p = params[:replacement]
  @replacement = Replacement.new( p )

  respond_to do |format|
    if @replacement.save
      format.html { redirect_to @replacement, notice: 'Replacement was successfully created.' }
      format.json { render json: @replacement, status: :created, location: @replacement }
    else
      format.html { render action: "new" }
      format.json { render json: @replacement.errors, status: :unprocessable_entity }
    end
  end
end

Replacement問題は、レールアプリで新しいアプリを作成しようとすると、次のエラーが発生することです。

NoMethodError in ReplacementsController#create
  undefined method `each_pair' for "50381cb24ed00a707c0000c1":String

replacementとの文字列を使用current可能な mongo オブジェクトに一致させるのに苦労しているようです。

でルックアップを試みましたAsset.find( BSON::ObjectId.from_string( p['current'] )が、エラーは発生しませんが、リレーションシップを mongo コレクションに入れているようには見えません。

私は何を間違っていますか?

4

0 に答える 0