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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

765閲覧

railsのActiveRecordの親と子で子のデータがあるかないかを判断して、親をソートする方法

big2017

総合スコア39

Ruby on Rails 5

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2020/04/30 09:10

編集2020/04/30 13:55

ActiveRecordでRestaurantとmenuとimageという3つのモデルがあります
レストラン(restaurant)には複数のメニュー(menu)があり、メニューには1枚だけ写真を設定できる(nilの場合もある)という使い方です。
メニューをソートをしたいのですが、写真(image)があるのものから順番にソートする時にはどのようなクエリを書けば良いのでしょうか。。。

restaurant.rb

ruby

1class Restaurant < ApplicationRecord 2 # id 3 # name 4 5 6 has_many :menu 7end

menu.rb

ruby

1class Menu < ApplicationRecord 2 # id 3 # restaurant_id 4 # name 5 6 has_one :image 7 belongs_to :restaurant 8end

image.rb

class Image < ApplicationRecord # id # menu_id # image_path belongs_to :menu end

大変お手数おかけしますが、
わかる方いらっしゃいましたら、教えてもらえますと幸いです。。。

最終的に行いたいことは写真付きのメニューはAの場所(5メニューが上限)に配置し写真なしの場合にはBの場所に配置することです。
例えばmenuが合計20件あり、そのうちimageが設定されているのが7件あった場合、先頭から5番目までのimage付きmenuはAの場所に、それ以外の15件はBの場所に配置するということです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

# Menu.rb, とりあえずmenuで読んでいますがレストランからでも呼べたりします scope :with_images, -> { select("menus.*", "COUNT(images.id) as image_count").joins(:images).group("menus.id").where.not(images:{id: nil} ).order("image_count DESC") } # 使いたか Menu.with_images -> [Menuオブジェクト, Menuオブジェクト, Menuオブジェクト] # こんな感じで出るはず

多分動きますが、動かなければ教えてくだ際

参考サイト
https://solidfoundationwebdev.com/blog/posts/how-to-find-records-based-on-has_many-relationship-being-empty-or-not-in-rails
https://teratail.com/questions/34058

投稿2020/04/30 17:39

hiyashikyuri

総合スコア388

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

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

big2017

2020/04/30 23:41

hiyashikyuriさん すみません、回答いただきありがとうございます。 試してみたいと思います。 複雑なクエリなのにも関わらず回答いただき大変感謝申し上げますmm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問