レールで左外部結合を実行する必要がありますが、結合されたテーブルのモデルオブジェクトが必要です。レールで結合されたテーブルのモデルを使用して左外部結合
私が欲しいのは、毎日の測定基準と一緒に、日のリストです。メトリクスがあるかどうかに関わらず、私はいつも一緒にいなければなりませんが、私はデータベースへの往復を望んでいません。
これは動作しますが、それは私が本当にメトリックオブジェクトをしたいときに私はPeriodDayオブジェクトを持っていると考えているので問題が発生します。
PeriodDay.select("metrics.*").join('LEFT OUTER JOIN metrics ON period_days.date = metrics.date').where('period_id = ?', current_period)
私はメトリックオブジェクトにfind_by_sql使用できますが、クエリの建物が複雑(かつ条件付きであります)この単純化された例よりもむしろ、この問題のために「レールの道」を理解したいと思います。
このようなLEFT OUTER JOINは、存在しないメトリック・オブジェクトになる可能性があるため、メトリック・オブジェクトにNULL IDを持たせるのは意味がありません。 PeriodDayオブジェクトを結果として取得する必要があります。 –
@Pan Thomakosはい、ヌルIDがある可能性がありますが、IDを参照する必要はありません(更新などはありません)。 PeriodDayオブジェクトがある場合、すべてのメトリックフィールドは文字列として扱われます。これは巨大なPITAです。 –
問題は、プライマリ・テーブルがperiod_daysである左外部結合を実行しているため、period_day情報のみを持つ完全にNULLのメトリック・オブジェクトがたくさんある可能性があります。あなたが 'LEFT OUTER JOINメトリック期間'を実行していた場合、これは別のことになります。 –