RoR中时间表应用程序的数据库体系结构

时间:2011-06-16 21:07:56

标签: ruby-on-rails ruby-on-rails-3

当我正在阅读rails 3时,我想制作一个小应用程序,这将帮助我学习本书。我想在rails中制作一个简单的时间表应用程序,但是,就日历功能而言,我无法弄清楚从哪里开始。这就是我到目前为止所拥有的。

User has_many Timesheets

Timesheet belongs_to user

时间表将包含date:datetimehours:datetimecomments:string属性。

如何将整月映射到时间表?

例如。

如果用户想填写06/01/2011 - 06/07/2011的时间表,他会在Timesheet表中有七行吗?

我希望有人为此解释ActiveRecord的简短架构。

1 个答案:

答案 0 :(得分:2)

我至少会从这样的事情开始:

class User < ActiveRecord::Base
  has_many :timesheets
end

class Timesheet < ActiveRecord::Base
  belongs_to :user
  has_many :work_days
end

class WorkDay < ActiveRecord::Base
  belongs_to :timesheet
end

Timesheet将具有user_id:integer属性。

WorkDay将拥有day:datehours:integercomment:texttimesheet_id:integer属性。

然后,您可以创建任何您希望的个人工作日集合的时间表。

WorkDay的表单可能如下所示:

<%= form_for @work_day do |f| %>
  <%= f.label(:timesheet, 'Timesheet') %>:
  <%= f.collection_select(:timesheet_id, Timesheet.all, :id, :name) %><br />
  <%= f.label :day, 'Date' %>:
  <%= f.date_select :day %><br />
  <%= f.label :hours, 'Hours worked' %>:
  <%= f.text_field :hours %><br />
  <%= f.label :comment, 'Comments' %>:
  <%= f.text_area :comment %><br />
<% end %>

这将允许您创建一个包含其所有属性的新WorkDay,并将其附加到任何现有的时间表。

注意:这将在Timesheet中查找name方法,您可以像这样实现,例如:

def name
  "Timesheet ##{self.id}"
end