質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

659閲覧

has_manyで関連付けたモデルでソートする方法

Yaiba184

総合スコア122

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/10/17 10:12

has_manyで関連付けたモデルの最後の行のcreated_atカラムでソートする方法はありませんか?
具体的に例を出すと、例えばpostモデルにcommentモデルが関連付けられているとして、

@post.comments.last.created_at

でorderしたいんです。

もしかしたらこれでいけるんじゃないかと思って書いてみたんですが

@head_post = Post.order(comments.last.created_at)

案の定うまくいきませんでした。。。
なにかこれを達成する方法があればご教授願います。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

touchオプションでコメントに変更があればPostも更新すると Post.order(:updated_at) だけで実現できます

ruby

1class Post < ApplicationRecord 2 has_many :comments, touch: true 3end

■利点
参照時の速度が早い
コメントを削除した時にも更新されるため、コメント削除時も上に並べたい時に有効
※)comments.created_at を見る方法は削除しても上に行かず逆に下に行く場合もある

■欠点
コメント保存時のSQLが増える
Post自体の最終更新日が分からなくなる
※)記録したいなら posted_at カラムを作り自前で保存するなど手間と注意が必要

投稿2018/10/18 00:03

Ighrs

総合スコア656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yaiba184

2018/10/19 14:41 編集

回答有り難うございます! シンプルかつ確実な方法で感激しました!! 本当にありがとうございます
guest

0

こんにちは。
以下でどうでしょう?

ruby

1Post.joins(:comments) 2 .group('posts.id') 3 .order('MAX(comments.created_at) DESC')

または、Commentを一件も持っていないPostも対象に含めるのであれば、

ruby

1Post.left_outer_joins(:comments) 2 .group('posts.id') 3 .order('MAX(comments.created_at) DESC')

参考になれば幸いです。

投稿2018/10/17 21:29

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yaiba184

2018/10/18 11:45 編集

回答ありがとうございます! やってみたのですがこの方法だと1つのtopicに10個commentが作られたら10個topicが表示されてしまいます。 ソートというよりはコメント通知モデルのようになってしまいました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問