1

2つの異なるモデルをハッシュに入力しました。次に、それらを次のように並べ替えようとします。

@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

ユーザーと本の両方に整数ベースのimpressions_countがあります。この属性で並べ替えることができないのはなぜですか?他にどのようなオプションがありますか?

4

1 に答える 1

1

私は最近同様の問題に直面し、他のすべての方法が配列を返すため、カスタム SQL を作成することになりました。特にデータセットが大きくなる場合、RubyよりSQLでソートする方が常に効率的であるため、ソートメソッドを使用することはお勧めできません。

  @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 に答える