Rails搜索序列化记录

时间:2011-10-10 06:08:14

标签: ruby-on-rails

在模型中,我将事件模型中的列类别序列化为数组,所以我有

serialize :category

问题是,我需要为用户提供搜索功能。那么我如何搜索一个类别是否在一个事件中。

Event.find(:all, :conditions => ['category = ?', params[:category]])

这不起作用,因为类别存储为序列化数组。有什么想法吗?

我能想到的唯一方法是获取所有事件并过滤掉每个实例。

Event.all.select{|e| e.category.include? params[:category]}

这根本没有效率。

否则,我可以使用like statement

Event.find(:all, :conditions => ['category = ?', "%-#{params[:category]}%"])

3 个答案:

答案 0 :(得分:2)

我会为类别创建一个单独的表和模型。然后,您可以使用has_many关联获取类别中的所有事件。

答案 1 :(得分:1)

您可以使用.to_yaml来匹配存储在数据库中的序列化格式。

Event.where(category: params[:category].to_yaml)

答案 2 :(得分:0)

Event.where("category IN (?)" , params[:category].to_yaml)