rails与模块名称连接

时间:2013-03-09 04:50:57

标签: ruby ruby-on-rails-3

以下是如何加入两个模型

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

但是如何使用module / namspace加入两个模型

@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})

现在可行了

1 个答案:

答案 0 :(得分: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)