【问题标题】:Mapping legacy database columns in a rails project在 Rails 项目中映射旧数据库列
【发布时间】:2011-02-01 09:31:04
【问题描述】:

我们正在为一个已经存在的数据库创建一个 Rails 应用程序。我们需要将一些数据库表映射在一起。

假设我们有三个表:event、event_groups 和 event_to_groups。
有一些事件,有一些组,每个事件可以分配到一个或多个组。

如何在 Rails 中建模这种关系?

例如:

现有表:

事件 身份证名称 -------------------- 3 晚餐 4 运动 5周年 6岁生日 事件组 身份证名称 -------------------- 1 件作品 2 个朋友 3个家庭 event_to_groups event_id 事件组 -------------------- 3 2 3 3 4 1 4 2 4 3 5 3 6 2 类事件 类组 类 EventToGroups

如何从事件模型中检索属于某个事件的组名?谢谢。

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord models


    【解决方案1】:

    有几件事 - 首先,ActiveRecord 模型应该是单数,而不是复数。另外,我假设您的意思是 Group 模型的表是“event_groups”,而不是“groups”?

    试试这个:

    class Event < ActiveRecord::Base
      set_table_name 'events'
      has_many :event_to_groups
      has_many :groups, :through => :event_to_groups
    end
    
    class Group < ActiveRecord::Base
      set_table_name 'event_groups'
      has_many :event_to_groups
      has_many :events, :through => :event_to_groups
    end
    
    class EventToGroup < ActiveRecord::Base
      set_table_name 'event_to_groups'
      belongs_to :event
      belongs_to :group, :foreign_key => 'event_groups'
    end
    

    我还会选择一个比“EventToGroup”(可能是“Attendee”或其他名称)更具描述性的模型名称,但这取决于您。

    应该这样做 - 然后您可以执行以下操作:

    @event = Event.find(5)
    @groups = event.groups
    

    编辑:Ack,这些关系应该是 has_many,而不仅仅是 many。我一直在使用 MongoMapper。

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多