如何与Rails中的现有记录创建多对一关系

时间:2011-06-28 19:37:01

标签: ruby-on-rails foreign-keys associations reference

我正在尝试实现类似于下面的内容。基本设置是Schedule模型

class Schedule < ActiveRecord::Base
  has_many :events
end

Event模型将属于Schedule。 事件由名称,日期时间,运行长度和Room

组成

创建事件时,从选择列表中选择Room,所有房间都是通过种子或管理界面预先创建的。会议室将存储座位数等信息。

我一直在努力寻找一种实现这一目标的方法。解决方案似乎介于habtm或has_many之间:但是我看不出需要为这种情况提供连接表。 从理论上讲,事件has_one :room但反向关系不是belongs_to :event,因为房间可以用于许多事件,这也需要外键在房间表上。

我考虑过在事件中使用room_id外键在模型中手动处理,然后我可以查询相关的房间。我认为这样可行,因为我目前看不到使用房间查找所有事件的要求。

class Event < ActiveRecord::Base
  belongs_to :schedule

  def room
    Room.find(room_id)
  end
end

到目前为止,我在Rails中所做的一切都感觉“正确”,但我在这里提出的所有解决方案都没有,我觉得我错过了一些东西;或者我只是期待额外的魔力。 是否有“Rails”方法可以做到这一点?

1 个答案:

答案 0 :(得分:4)

在这种情况下,事件是否只有与Rooms的belongs_to关系?

class Event < ActiveRecord::Base
  belongs_to :schedule
  belongs_to :room
end

如果您从架构的角度考虑它,您的“事件”表几乎肯定有“schedule_id”和“room_id”列。

关系的另一面是房间有很多活动。