映射rails项目中的旧数据库列

时间:2010-03-26 22:14:12

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

我们正在为现有数据库创建rails应用程序。我们需要将一些数据库表映射到一起。

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

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

例如:

现有表格:

event
    ID      name
    --------------------
    3       dinner
    4       sport
    5       anniversary
    6       birthday

event_groups
    ID      name
    --------------------
    1       work
    2       friends
    3       family

event_to_groups
    event_id    event_groups
    --------------------
    3           2
    3           3
    4           1
    4           2
    4           3
    5           3
    6           2
class Events < ActiveRecord::Base
  set_table_name 'events'
end
class Groups < ActiveRecord::Base
  set_table_name 'groups'
end
class EventToGroups < ActiveRecord::Base
  set_table_name 'event_to_groups'
end

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

1 个答案:

答案 0 :(得分: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”更具描述性的模型名称(可能是“参加者”或其他东西),但这取决于你。

应该这样做 - 然后你可以做类似的事情:

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

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