Techioz Blog

Rails - 結合テーブルデータによる並べ替え

概要

RoR プロジェクトを進行中です。私のモデルの該当するセクションは次のとおりです。

has_many :communities, :through => :availabilities
has_many :availabilities, :order => "price ASC"

コミュニティ

has_many :homes, :through => :availabilities
has_many :availabilities

可用性

belongs_to :home
belongs_to :community

データベースの「availabilities」テーブルには、追加のデータ列「price」があります。

これで電話できるようになりました

@home.availabilities.each do |a|
  a.community.name
  a.price

そして、希望どおりに価格順に並べられた在庫データを取得します。私の質問は次のとおりです。

avaliabilities.first.price (最初 = 最低) で住宅を自動的に注文する方法はありますか?おそらくdefault_scope :orderを備えたものでしょうか?

解決策

特に別のテーブルの価格などでは、default_scope の使用を避けることをお勧めします。そのテーブルを使用するたびに結合と順序付けが行われるため、複雑なクエリで奇妙な結果が得られる可能性があり、とにかくクエリが遅くなります。

独自のスコープには何も問題はありません。それはより単純で、さらに明確です。次のように単純にすることができます。

scope :ordered, -> { includes(:availabilities).order('availabilities.price') }

私はそれを「price_ordered」と呼びます。

PS: 価格に関するインデックスを忘れずに追加してください。参加するか含めるかを決定するには、ここにある他の優れた回答も参照してください。