2009-11-09 146 views
0

我正在查找的功能:我有一个表单将搜索我的“建议”模型。我希望表单包含一个选择框并显示我拥有的类别。现在,“类”只不过是我的“建议”型号一栏,所以从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和名称列?

在此先感谢:-)

回答

2

首先,是你应该把这些类别在自己的模式。或者考虑像acts_as_taggable*这样的插件类别是您的应用程序中的一个实体,应该像这样存在。

  1. 将其添加为模型可以让您轻松强制用户从列表中选择并维护列表。
  2. 如果您想隐藏视图中的某些旧类别,您可以随时添加可见布尔值。您只需添加一个可见的named_scope即可轻松查询要使用的项目来填充collection_select
  3. 将类别作为模型也会让您知道每个类别的创建时间。

如果你想破解连同你有什么事情,你可以加载这些对象,把他们的类别到一个数组,然后做array.uniq!得到你想要的人。

您可以将方法添加到返回唯一类别的提案。

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

谢谢丹维诺给我一个完整的答案。我将添加一个类别模型,因为它会使短期问题更容易,并且可能也是未来问题。 谢谢。 – asdfasdfasdfasdf 2009-11-10 09:05:37