【问题标题】:How to create a Many-to-One relationship with existing records in Rails如何在 Rails 中创建与现有记录的多对一关系
【发布时间】:2011-06-28 19:37:01
【问题描述】:

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

class Schedule < ActiveRecord::Base
  has_many :events
end

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

组成

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

我一直在尝试找到一种感觉正确的方法来实现这一点。解决方案似乎介于 habtm 或 has_many :through 之间,但我看不出这种情况需要连接表。 理论上,Event has_one :room 但反向关系不是 belongs_to :event,因为 Room 可以用于许多事件,这也需要外键在 rooms 表上。

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

class Event < ActiveRecord::Base
  belongs_to :schedule

  def room
    Room.find(room_id)
  end
end

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

【问题讨论】:

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


    【解决方案1】:

    在这种情况下,Event 不只是与 Room 有belongs_to 关系吗?

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

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

    关系的另一面是 Room has_many Events。

    【讨论】:

    • 只是补充一点:不要将“belongs_to”视为暗示所有权(就像在英语中所做的那样),而仅将其视为“有”关系可能会有所帮助。它暗示了与“has_one”相同的关系——只是外键在不同的表上。
    • 谢谢你们俩。我想我可能一直在思考 Rails 中的关联,特别是在 has_one 听起来很适合这种情况的地方。我还在 has_many/belongs_to 关联中混合了外键的位置。朝正确的方向轻推,几个小时后就会有所帮助。
    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多