使用以下 Store 和 Service 模型,由 MongoMapper 管理:
class Store
include MongoMapper::Document
key :service_ids, Array, :typecast => 'ObjectId'
many :services, :in => :service_ids
end
class Service
include MongoMapper::Document
key :name, String
many :stores, :foreign_key => :service_ids
end
我有这个表格,用 Formtastic 完成:
<%= semantic_form_for @store, :url => admin_store_path(@store), :method => :put do |form| %>
<%= form.input :service_ids, :label => "Select Store Services",
:as => :check_boxes,
:collection => Service.all %>
<% end -%>
控制器使用继承资源,并且编辑操作是隐式的。
在编辑已关联服务的 @store 时,后者的复选框不会显示为选中状态。
Formtastic 的 README警告它不正式支持 MongoMapper,但它也说人们已经成功地同时使用了这两种方法,我在网上看到了一些这样的例子。
我怀疑Inherited Resources也不支持它,从我从 Devise + Simple Form 中看到的,都来自同一作者并且不支持 MM。他们正在努力在他们的 gems 中使用 ORM 适配器,但它还没有准备好 AFAIK。
而且我已经遇到了问题,我正在覆盖更新操作以使其正常工作:
def update
store = Store.find(params[:id])
if store.update_attributes!(params[:store])
flash[:notice] = 'Store was successfully updated.'
redirect_to admin_store_path(store)
else
redirect_to new_store_path
end
end
有谁知道与 MM 的冲突在哪里,无论是在 Formtastic 还是 IR 中,以及为了检查这些复选框而进行的黑客攻击?