ShiftNote belongs_to Shift has_many ShiftNote
範囲が欲しいShiftNote.by_month("2013-10")
それを実装する方法は?
今私はしようとしています:
ShiftNote.includes(:shift)
.where("shifts.starts_at <= ? AND shifts.starts_at >= ?", "2013-10-01".to_date, "2013-10-30".to_date)
しかし、私は得る
ShiftNote.includes(:shift).where("shifts.starts_at <= ? AND shifts.starts_at >= ?", "2013-10-01".to_date, "2013-10-30".to_date) 非推奨警告:文字列 SQL スニペットで参照されているテーブル (shift_notes、shifts のいずれか) を積極的にロードしているようです。例えば:
Post.includes(:comments).where("comments.title = 'foo'")
現在、Active Record は文字列内のテーブルを認識し、別のクエリでコメントをロードするのではなく、コメント テーブルをクエリに JOIN することを認識しています。ただし、本格的な SQL パーサーを作成せずにこれを行うと、本質的に欠陥があります。SQL パーサーを書きたくないので、この機能を削除します。これからは、文字列からテーブルを参照するときは Active Record に明示的に伝える必要があります。
Post.includes(:comments).where("comments.title = 'foo'").references(:comments)
暗黙的な結合参照に依存しない場合は、設定することで機能を完全に無効にすることができます
config.active_record.disable_implicit_join_references = true
。SQL (1.6ms) SELECTshift_notes
.id
AS t0_r0,shift_notes
.state
AS t0_r1,shift_notes
.user_id
AS t0_r2,shift_days
.shift_id
AS t0_r3,shift_notes
.created_at
AS t0_r4,shift_notes
.updated_at
AS t0_r5,shifts
.id
AS t1_r0,shifts
.starts_at
AS t1_r1,shifts
.ends_at
AS t1_r2,shifts
.rate
AS t1_r3,shifts
.limit
AS t1_r4,shifts
.created_at
AS t1_r5,shifts
.updated_at
AS t1_r6,shifts
.state
AS t1_r7,shifts
.shift_notes_count
AS t1_r8 FROMshift_notes
LEFT OUTER JOINshifts
ONshifts
.id
=shift_notes
.shift_id
WHERE (shifts.starts_at <= '2013-10-01' AND shifts.starts_at >= '2013-10-30')