1

我用两种不同的模型填充了一个哈希。然后我尝试像这样对它们进行排序:

@search_results = User.find(:all, :conditions => ['name LIKE ?', "%#{params[:query]}%"])
@search_results += Book.find(:all, :conditions => ['title LIKE ?', "%#{params[:query]}%"])
@search_results.sort! { |a,b| a.impressions_count <=> b.impressions_count }

这会引发以下错误:

comparison of User with Book failed

用户和图书都有一个基于整数的印象数。为什么我不能通过这个属性排序?我还有什么其他选择?

4

1 回答 1

1

我最近遇到了类似的问题并最终编写了一些自定义 sql,因为所有其他方式都返回了一个数组。很确定使用 sort 方法不是一个好主意,因为在 SQL 中排序总是比 ruby​​ 更有效,尤其是当数据集变大时

  @combined_results = User.find_by_sql(["SELECT title, id, impressions_count, NULL as some_attribute_of_book
                                         FROM user
                                         WHERE title LIKE ?
                                         UNION SELECT title, id, impressions_count, some_attribute_of_book FROM book 
                                         WHERE title LIKE ?
                                         ORDER BY impressions_count", params[:query], params[:query]])

以上是完全未经测试的代码,更多的是一个例子

于 2012-07-17T22:01:22.463 回答