2016-11-22 3 views
1

私は2つのActiveRecordモデル - ResidenceApartmentを持っています。子供の特定の属性に従ってActiveRecordインスタンスを注文する

class Residence < ActiveRecord::Base 
    has_many :apartments 
end 

class Apartment < ActiveRecord::Base 
    belongs_to :residence 
end 

apartmentsテーブルフィールドprice_from(単価)とareaを有しています。そのマンションの合計価格は、私はまた、私はこのスコープを呼んで昇順/降順に住居をソートすることができる午前住宅

def min_price_for_apartment 
    apartments.minimum("price_from*area") 
end 

ためのインスタンスメソッドを定義したprice_from * area

です。

#scope: with_children, -> { where(published: true).includes(:apartments).joins(:apartments) } 

scope: sort_by_unit_price_asc, -> { with_children.order('apartments.price_from') } 
# scope: sort_by_unit_price_asc, ->{adding desc to the end of previous scope} 

最低アパート価格で住居を分類するにはどうすればよいですか?

UPDATE:私は純粋なSQLを使用して解決策を見つけた、今

# select residences.name from residences inner join apartments on residences.id = apartments.residence_id group by (residences.id) order by min(apartments.price_from*apartments.area) 

    name  
----------- 
Lorem 
Ipsum 
Quod 
Maritimus 
Amet 
(5 rows) 

P.S.をArにそれを翻訳する必要があります私は他の関連する質問と答えを知っていますが、どれも私を助けませんでした。私はまた、フロントエンドベースのソリューションを実装することを認識しており、そのような値をdata-attributesに渡して、それに従ってソートします。

答えて

0

これは私の問題を解決しました。誰かが必要な場合は、将来の参照のために追加するだけです。

scope :with_children, -> { where(published: true).joins(:apartments).group('residences.id') } 

    scope :sort_by_price_sqm_asc, -> { with_children.order("MIN(apartments.price_from)") } 
1
scope: sort_by_unit_price_asc, lambda {     
    with_children.group('residences.id').order('MIN(apartments.price_from * apartments.area') 
} 
+0

答えに感謝しますが、私はすでにこれを試してみた、とこのようなエラーが 'PG :: GroupingErrorます:ERROR:コラム「apartments.idは」GROUP BY句に表示される必要がありますまたは集約function'で使用すること ps parathesisの後に一重引用符を入れる - )) p.p.s私の質問で更新するためのルックアップがあります。 – marmeladze

関連する問題