如何在表单中为非相关模型添加选择字段?

时间:2014-08-18 08:59:53

标签: ruby-on-rails select activerecord

我有三个型号。文章,类别和子类别。

关系:

Article belongs_to :subcategory
Subcategory has_many :articles
Subcategory belongs_to :category
Category has_many :subcategories

现在,在新文章的表单中,我想要一个字段来选择一个类别,它将(用ajax)添加另一个字段来选择子类别。那么,第一个问题是,当该模型与Article模型无关时,如何选择Category?

2 个答案:

答案 0 :(得分:1)

使用select_tag帮助程序代替f.select

该值不会是params[:article]

的一部分
select_tag "category", options_from_collection_for_select(@categories, "id", "name")

答案 1 :(得分:1)

如果您在子类别中没有任何特殊功能,我建议您使用自我参照关联。使用像ancestry gem这样的东西。您有2个模型CategoryArticle

class Article < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_ancestry
  has_many :articles
end

它允许您以更加方便的方式使用您的类别树:

Category.roots                   Root nodes
Category.ancestors_of(node)      Ancestors of node, node can be either a record or an id 
Category.children_of(node)       Children of node, node can be either a record or an id
Category.descendants_of(node)    Descendants of node, node can be either a record or an id
Category.subtree_of(node)        Subtree of node, node can be either a record or an id
Category.siblings_of(node)       Siblings of node, node can be either a record or an id

在表单中,您可以使用Category.roots进行预选,并在选择其中一个后使用Category.children_of(selected_node)