在模型中,我将事件模型中的列类别序列化为数组,所以我有
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]}%"])
答案 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)