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