Ruby on rails 搜索逻辑功能

Ruby on rails 搜索逻辑功能,ruby-on-rails,ruby,plugins,rubygems,Ruby On Rails,Ruby,Plugins,Rubygems,我正在寻找的功能:我有一个表单可以搜索我的“提案”模型。我希望表单包含一个选择框并显示我拥有的类别。现在,“category”只是我的“Proposal”模型中的一列,因此railscasts的以下代码不起作用,因为它假设了一个category表和category\u id的使用 <%= f.collection_select :category_id_equals, Category.all, :id, :name, :include_blank => tr

我正在寻找的功能:我有一个表单可以搜索我的“提案”模型。我希望表单包含一个选择框并显示我拥有的类别。现在,“category”只是我的“Proposal”模型中的一列,因此railscasts的以下代码不起作用,因为它假设了一个category表和category\u id的使用

            <%= f.collection_select :category_id_equals, Category.all, :id, :name, :include_blank => true %>
我得到的最接近的东西是

<%= f.collection_select :category_equals, Proposal.category_like(""), :id, :category, :include_blank => true %>
如果它只从category列中引入uniques,而不是重复case:-/,那么这将非常有效

此外……这让我产生了一个问题——我是否应该使用category_id来代替,并创建一个categories表,即使它只有and id和name列


提前感谢:-

首先,是的,您应该将这些类别放在它们自己的模型中。或者考虑一个插件,如ActhsAsTraceTaby*一个类别是你的应用程序中的一个实体,并且应该是这样的。p> 将其添加为模型可以轻松地强制用户从列表中进行选择并维护列表。 如果希望在视图中隐藏某些旧类别,可以在某一天添加可见的布尔值。您只需添加一个可见的命名范围,即可轻松查询要填充集合\u select的项。 将类别设置为模型也会让您知道每个类别是何时创建的。 如果你想用你所拥有的东西拼凑一些东西,你可以加载这些对象,把它们的类别放到一个数组中,然后执行array.uniq!为了得到你想要的

您可以向Proposal添加一个返回唯一类别的方法

def self.unique_categories
  categories = []
  Proposal.all.each do |p|
    categories << p.category
  end
  categories.uniq
end

谢谢丹维诺给了我一个完整的答案。我将添加一个类别模型,因为它将使短期问题变得更容易,并且可能也会使未来的问题变得更容易。谢谢