3

这是连接两个模型的方法

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

但是如何使用模块/命名空间加入两个模型

@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 模块

belongs_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,rails 会为你做连接。

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 回答