如何为现有引用的reference_many关联创建表单? (mongoid 2.0.0.beta.20)

时间:2011-03-09 09:43:08

标签: ruby-on-rails-3 mongoid

假设我有一个模型A,它引用了许多其他模型B.我有一组B,并且想要创建一个创建/破坏关联的表单(多对多)。

这样做的最佳方法是什么?我可以以某种方式使用accept_nested_attribures_forfields_for帮助器,就像我用来创建新的参考对象一样吗?

编辑:示例

我有一个模型类别和另一个模型发布。我希望每个发布 reference_many 类别。我有一个静态集类别。所以我不想创建新的类别,而是创建对现有类别的引用。

使用类别选择扩展 Post 的新/编辑形式的最简单方法是什么。现在我正在手动处理类别,因为我无法弄清楚如何将accept_nested_attribures_forfields_for与现有参考对象一起使用。

1 个答案:

答案 0 :(得分:2)

您可以使用references_and_referenced_in_many来描述帖子和类别之间的关联,但它自2.0.0.rc.1以来就存在于mongoid中。您可以为您的情况明确定义多对多关联的模型,例如,PostCategory

class PostCategory
  include Mongoid::Document
  referenced_in :category, :inverse_of => :post_categories
  referenced_in :post, :inverse_of => :post_categories
end

class Category
  include Mongoid::Document
  references_many :post_categories
end

class Post
  include Mongoid::Document
  references_many :post_categories, :dependent => :delete

  accepts_nested_attributes_for :post_categories
  attr_accessible :post_categories_attributes  
end

在视图中(我在这里使用simple_form和haml,但使用旧的脏form_for和ERB的方法相同):

= simple_form_for setup_post(@post) do |f|
  ...
  = f.simple_field_for :post_categories do |n|
    = n.input :category, :as => :select, :collection => Category.asc(:name).all

最后(但并非最不重要)的事情是setup_post帮助,它起到了作用:

module PostsHelper
  def setup_post(post)
    post.tap do |p|
      p.post_categories.build if p.post_categories.empty?
    end
  end
end

就是这样。