3

2つのモデルを結合する方法は次のとおりです

User.where(:id => 1).joins(:posts)

しかし、モジュール/ナムスペースで2つのモデルを結合する方法

@schedules= Swimming::Classschedule.joins(:Swimming::Slot).where(:date => @date)

正しく機能していないようです(エラーメッセージ付き)

:Swimming is not a class/module

アップデート

@ schedules = Swimming :: Classschedule.joins(:swimming_slots).where(:date => @date)に更新しました

そして私はこのテーブルを持っています

create_table :swimming_classschedules do |t|
  t.integer :slot_id
  t.integer :coach_id
  t.integer :level_id
  t.string :note

  t.timestamps
end


create_table :swimming_slots do |t|
  t.string :date
  t.string :start
  t.string :end

  t.timestamps
end

どうしてこのエラーが発生した

Association named 'swimming_slots' was not found; perhaps you misspelled it?

アップデート2

この行をSwimming::Classscheduleモジュールに追加します

所属_to:swimming_slots、:class_name =>'Swimming :: Slot'、:foreign_key => "slot_id"

参加を変更します

@schedules= Swimming::Classschedule.joins(:swimming_slots).where(:swimming_slots =>{:date => @date})

今それは動作します

4

1 に答える 1

2

結合に関連付け名を渡します。たとえば、次のような関連付けがある場合

has_many :swimming_slots, class_name: 'Swimming::Classschedule'

次に、パスswimming_slotsすると、レールが結合を行います。

User.joins(:swimming_slots)

アップデート:

slot_idテーブル内のレコードを参照している場合は、次のswimming_slotsようなものが必要です。

belongs_to :slot, class_name: 'Swimming::Slot'

クラススケジュールモデルで。あなたがそれを持っているなら、あなたはすることができるはずです

Swimming::Classschedule.joins(:slot)
于 2013-03-09T05:01:07.217 に答える