我正在使用 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 的字符串replacement
与current
可用的 mongo 对象匹配。
我尝试使用 进行查找Asset.find( BSON::ObjectId.from_string( p['current'] )
,这不会引发错误,但似乎也没有将关系放入 mongo 集合中。
我在做什么错?