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.idAS t0_r0,shift_notes.stateAS t0_r1,shift_notes.user_idAS t0_r2,shift_days.shift_idAS t0_r3,shift_notes.created_atAS t0_r4,shift_notes.updated_atAS t0_r5,shifts.idAS t1_r0,shifts.starts_atAS t1_r1,shifts.ends_atAS t1_r2,shifts.rateAS t1_r3,shifts.limitAS t1_r4,shifts.created_atAS t1_r5,shifts.updated_atAS t1_r6,shifts.stateAS t1_r7,shifts.shift_notes_countAS t1_r8 FROMshift_notesLEFT OUTER JOINshiftsONshifts.id=shift_notes.shift_idWHERE (shifts.starts_at <= '2013-10-01' AND shifts.starts_at >= '2013-10-30')