【问题标题】: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。