窓際BLOG

プログラミングの学習メモや書籍の感想等を公開していきます。

Ruby on Rails:複数の取得結果を合わせて、更新日時の降順で並び変える方法

f:id:madogiwa0124:20170729104257p:plain

ruby on railsで別のメソッドで取得した結果を合わせて、更新日時の降順に並べ替える際にハマったのでメモφ(..)

やりたかったこと

別メソッドで取得した結果を結合後に更新日時の降順に並べ替える。

例:キーワードに合致するタグ及び名称を持つレコード

最初にやろうとしたこと

下記ページを参考に実装してみたが、上手く行かず。。。

loudspeaker.sakura.ne.jp

def self.search(key)
  # 検索値に合致したページの一覧を降順で返却
  result1 = Page.where("name like '%#{ key }%'")
  result2 = Page.tagged_with(key)
  (result1 + result2).uniq.sort_by{ |v| -v['updated_at'] }
end

エラー画面 f:id:madogiwa0124:20170810220448p:plain

解決策

他にもっと良いやり方がありそうですが、一旦昇順で取得し、reverseで降順にすることで解決・・・!

def self.search(key)
  # 検索値に合致したページの一覧を降順で返却
  result1 = Page.where("name like '%#{ key }%'")
  result2 = Page.tagged_with(key)
  (result1 + result2).uniq.sort_by{ |v|  v['updated_at'] }.reverse
end