2 つの異なるテーブルの 2 つの列を追加する最大値を返すクエリを Rails で作成するのに苦労しています。私は 2 つのモデルを持っています。それらにAudio
とという名前を付けましょう。私がやりたいことは、Rails で次の SQL クエリを作成することです。Property
Property
"id, audio_id, starts_at, collection_name"
"id and length"
SELECT MAX(property.starts_at + audio.length) FROM audio
INNER JOIN property WHERE property.audio_id = audio.id
AND property.collection_name = 'some_name';
関連付けはbelongs_to :audio
、Property とhas_many :properties
Audio のためだけです。collection_name が 'some_name' であるすべてのプロパティを取得し、それぞれを反復処理して、最大値を変数に保存し、最大値を返すように構築できます。
def full_length
full_lengths = []
Property.where(:collection_name => 'some_name').each do |p|
full_lengths << p.audio.length + p.starts_at
end
full_lengths.max
end
しかし、それはパフォーマンスの点であまり良くないように見えますし、Ruby/Rails のやり方ではないようです。これを可能にする ActiveRecord メソッドの組み合わせはありますか?