搜索逻辑功能

时间:2009-11-09 20:50:24

标签: ruby-on-rails ruby plugins rubygems

我正在寻找的功能:我有一个表格可以搜索我的'Proposal'模型。我希望表单包含一个选择框并显示我的类别。现在,'category'仅仅是我的'Proposal'模型中的一列,因此以下来自railscasts的代码不起作用(因为它假设一个类别表并使用category_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_id来创建一个类别表,即使它只有id和id列吗?

提前致谢: - )

1 个答案:

答案 0 :(得分:2)

首先,是的,您应该将这些类别放在他们自己的模型中。或者考虑像acts_as_taggable*这样的插件。类别是应用程序中的实体,应该存在。

  1. 将其添加为模型可让您轻松强制用户从列表中进行选择并维护列表。
  2. 如果你想隐藏视图中的一些旧类别,你总有一天会添加一个可见的布尔值。您只需添加一个可见的named_scope即可轻松查询要填充collection_select的项目。
  3. 将类别设为模型也会让您知道每个类别的创建时间。
  4. 如果你想用你所拥有的东西来破解某些东西,你可以加载这些对象,将他们的类别放入一个数组中,然后array.uniq!来获得你想要的那些。

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

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