假设我有一个模型A,它引用了许多其他模型B.我有一组B,并且想要创建一个创建/破坏关联的表单(多对多)。
这样做的最佳方法是什么?我可以以某种方式使用accept_nested_attribures_for
和fields_for
帮助器,就像我用来创建新的参考对象一样吗?
编辑:示例
我有一个模型类别和另一个模型发布。我希望每个发布到 reference_many 类别。我有一个静态集类别。所以我不想创建新的类别,而是创建对现有类别的引用。
使用类别选择扩展 Post 的新/编辑形式的最简单方法是什么。现在我正在手动处理类别,因为我无法弄清楚如何将accept_nested_attribures_for
和fields_for
与现有参考对象一起使用。
答案 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
就是这样。