私はUserモデルを持っているとしましょう。ユーザーにはhas_manyという2つの関連付けがあります。つまり、ユーザーは多くの鉛筆を持ち、多くの車を所有しています。 Cars and Pencilsテーブルには、同じ属性、:date、およびspeed(car)と:length(pencil)のようなものがあります。私は配列/リレーション[:日付、:スピード、:長さ]を持つように、ユーザーの鉛筆と車の一般的な属性:日付に参加したい。どのように達成するには、私は結合を試み、マージしますが、彼らは役に立たなかった。共通の属性に2つのActiveRecordアソシエーションを結合する
2
A
答えて
1
私は間違いなく、効率のために、クエリではなく、ループにこれを取得お勧めします。
Car.joins(:user => :pencils).where("pencils.date = cars.date")
をそして、あなたはすぐに、配列にそれを減らしたい場合:私は、これが機能すると思います
Car.joins(:user => :pencils).where("pencils.date = cars.date").pluck("cars.date", "cars.speed", "pencils.length")
あなたはdate
がnil
で試合を含める必要がある場合は、追加する必要があります
Car.joins(:user => :pencils).where("(pencils.date = cars.date) OR (pencils.date IS NULL AND cars.date IS NULL)")
1
多くのより効率的な選択肢が存在するが、ここでは一つの可能なアプローチは次のとおりです。
class User < ActiveRecord::Base
def get_merged_array
dates = (cars.map(&:date) & pencils.map(&:date))
results = []
dates.each do |date|
cars.where(date: date).each do |car|
pencils.where(date: date).each do |pencil|
results << [date, car.speed, pencil.length]
end
end
end
results
end
end
関連する問題
- 1. 2つの共通の列を持つ2つのテーブルに結合する
- 2. 2つのパスを共通のフォルダに結合する
- 3. 2つのテーブルとGROUPを共通の列で結合する
- 4. 2つのCSSクラスのプロパティをフィルタ属性で結合する
- 5. 共通のオブジェクト値を持つ2つのリストを結合するC#
- 6. 共通の属性を持つSQLテーブルについて
- 7. 作成時にhas_many:throughアソシエーションの結合テーブルレコードに属性値を追加
- 8. MarkLogicの共通IDに基づいて2つのドキュメントを結合する
- 9. 2つの属性付き文字列を連結/結合する方法は?
- 10. ユニーク属性ごとのActiveRecord合計
- 11. 2つのテーブルを結合して共通の値を取得する方法
- 12. Spark-scalaの共通フィールドを持たない2つのDataframeを結合する
- 13. が共通の列なしでテーブルを結合するが、私は、2つのテーブルを結合する
- 14. railsは共通の属性を持つタプルを返します
- 15. 2つのpython-listsで共通の属性を持つオブジェクトを見つけるのに効率的な方法
- 16. ダイナミックActiveRecordのアソシエーション
- 17. 2つのactiverecordクエリを結合する方法は?
- 18. Sequelizeアソシエーションに属性を追加する
- 19. 同じレコードの2つの属性を比較するactiverecordクエリをレンダリングする
- 20. 共通キーに基づいて2つのオブジェクトを結合/結合する(プッシュ?スプライス?)
- 21. 2つの結果セットを共通の列で結合するにはどうすればよいですか?
- 22. アソシエーションを共有する2つのテーブル間のクエリ
- 23. Ruby activerecord ActiveRecordを使用した2つのテーブルの外部結合
- 24. ActiveRecord結合モデルの属性をクエリ結果で使用できるようにする
- 25. MySQLで共通の属性を持つ2つのエンティティを実装する方法は?
- 26. XSLTは2つのドキュメントの要素の属性を結合します
- 27. activerecordハッシュに合成属性を取得する方法は?
- 28. MySql:2つのテーブルを結合して共通データを取得しない
- 29. activerecordの属性を翻訳する
- 30. Rails ActiveRecordアソシエーション
これは素晴らしい解決策であるように見えますが、試してみてください。もう一つの質問です。もし私が完全な外部の参加をしたいのであれば、私は車と鉛筆を取得したいと思います。 –