我们正在为现有数据库创建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
如何从事件模型中检索属于事件的组名?谢谢。
答案 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。