如何为每个用户实体创建一个唯一的日历实体?

时间:2013-02-07 17:25:30

标签: ruby-on-rails postgresql database-design rails-activerecord

我正在编写一个应用程序,它将广泛使用日历来存储每个实体的各种事物的日常信息。现在,我如何为每个实体制作新日历。我是否为用户表中的每个条目创建了一个表?

编辑:

我有一个实体用户。 现在每个实体都有一整年的日历。对于一年中的每一天,有2个字段将有一些数据。

现在我该怎么做?我应该为每个用户创建一个新表吗?或者我应该只使用用户的外键,并在每个用户的日历表中有365个条目。

编辑:

每个用户每天只有一个活动。 因为事件发生在用户的某个项目上,并且用户有很多项目,所以一个用户可以有多个日历。

2 个答案:

答案 0 :(得分:1)

修改

我认为tester123对你的问题有一个很好的答案。

class User < ActiveRecord::Base
  has_one :calendar
  has_many :calendar_events, :through => :calendar
end

class Calendar < ActiveRecord::Base
  belongs_to :user
  has_many :calendar_events
end

class CalendarEvent < ActiveRecord::Base
  belongs_to :calendar
end

在这种情况下,您有一个表users,每个用户在表calendars中都有自己的日历条目。用户还可以拥有0个或更多calendar_events。日历活动有一列event_date(您正在谈论的一年中的某一天)和两个包含“某些数据”的字段。

答案 1 :(得分:1)

您将拥有一个用户表和一个日历表。这就是我要开始的:

class User < ActiveRecord::Base
  has_one :calendar
end

class Calendar < ActiveRecord::Base
  belongs_to :user
  has_many :calendar_events
end

class CalendarEvent < ActiveRecord::Base
 belongs_to :calendar
end

然后你可以这样做:

User.calendar.calendar_events #returns array of active record CalendarEvent objects
User.calendar.calendar_events.where(:start_date => Date.today) #assuming you have a start date field

当您在一个看起来像日历的网格中渲染事件时,这些模型将只是一个真实的日历。