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在 Rails 应用程序上创建新应用程序时,出现以下错误:

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

看来我很难将 and 的字符串replacementcurrent可用的 mongo 对象匹配。

我尝试使用 进行查找Asset.find( BSON::ObjectId.from_string( p['current'] ),这不会引发错误,但似乎也没有将关系放入 mongo 集合中。

我在做什么错?

4

0 回答 0