稀疏网格视图,允许创建新记录和更新现有记录

时间:2012-05-28 23:52:13

标签: datagrid ruby-on-rails-3.1 best-in-place

我试图在RoR中创建一个简单的dojo考勤应用程序,目前我处理的是我知道自己可以做的事情,而不是我希望能做的事情,至少是关于显示,创建和更新出勤记录。 (该应用程序的其余部分对我来说似乎很简单。)

这里是相关表格的架构:

create_table "attendances", :force => true do |t|
  t.date     "class_date"
  t.integer  "student_id"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.integer  "class_hours", :default => 0
end

我知道我可以利用基本的脚手架视图,但这样做会很乏味,即新的出勤记录,选择日期,学生和花费的时间,保存,返回索引视图(修改为限制为具体月份)。对于单个记录创建,点击了很多。本身并不可怕,但我可以看到每个新条目都变得乏味。也就是说,如果系统用户意识到为该学生输入了错误的小时数,则这种方法更新非常简单。如果需要,完全删除记录就很简单。

我可以看到自己增强了上述内容:

  • 索引视图列出了某个月的所有学生,无论他们是否上过课
  • 可能会将学生的姓名作为新出勤页面的链接(如上所述)
  • 如果学生在该月份有相关日期的条目,则该网格中的该单元格将成为该记录的“编辑出勤”页面的链接
  • 我想我可以在编辑出勤页面底部添加删除链接

我真正想要的是提供以下内容的视图:

  • 一目了然的网格(在视图顶部的月份名称,理想情况下使用jQuery' datepicker)
  • 网格的第一列列出了所有学生
  • 每个列(在第一列之后)的标题,表示该月的日期,从1到N(该月的最后一天)
  • 如果学生在特定日期有出勤记录,则显示单元格中的小时数
  • 如果学生在特定日期不存在出勤记录,则不显示任何内容(或显示" - "或类似的占位符)

我试图弄清楚这个问题。如果网格具有每个单元格的值(即,每个学生都有显示该月的每一天的记录),那么我可以使用best_in_place来完成此操作。做完了。但是以这种方式膨胀桌子似乎是对桌子的极其低效的使用,特别是当你考虑到a)学生可能会永远留在名册上,除非他们已经做了如此令人难以置信的事情他们&#39已被禁止进入道场,b)没有人参加每个可用的课程,c)很少有学生参加大部分课程。我考虑过尝试使用best_in_class_if,除了它仍然需要记录存在,以便显示它。哎呀。

我最近才知道find_or_create_by,这简直给了我希望作为一种解决方法。然后我了解了这种创建create_or_update_by的方法,这给了我另一种希望,作为一种方法来解决这个问题,但是仍然有一些问题让我对如何实现它来实现它。也就是说,我必须在网格(html表)中创建某种不存在的记录,这些记录似乎无法实现。 (我从rails控制台测试create_or_update_by时遇到了问题,导致LocalJumpError: no block given (yield),但我无法确定原因。)

如果我对外观和感觉一无所知,我试图通过一个月一目了然的考勤视图,将其视为Excel电子表格:左栏中的学生,如果单元格为空,则可以向其添加值,如果单元格具有可以更改的值,则可以添加一个值。 (蓝天:如果class_hours值设置为零,则删除记录。)

我试图在Routes文档中找到灵感,以及Controllers文档。没有快乐。

我会很乐意考虑其他RoR解决方案,只要考虑以下几点,因为我意识到我可能完全错过了一个更明显/更优雅的方法:

  • 出勤月份一览(使用DataTables,我已经成功利用),列出了系统中的所有学生,无论他们是否参加了那个月的课程
  • 添加/更新学生出勤率的简单方法,理想情况下点击次数少于基本的脚手架视图

干杯。

编辑:进一步考虑,似乎一种合理的方法是使数据网格中的单元格在考勤表中没有表示为通过params student_id,class_date的链接,和class_hours到/ attendances / new route(从scaffold修改为接受并使用params),同样用于单击已经有值的单元格。 (我仍然可以考虑将best_in_place用于后者,但为了获得一致的UI,也许我应该避免这种情况。)

如果我错过了以更好的方式解决这个问题的黄金机会,我仍然很乐意接受富有洞察力的建议。

0 个答案:

没有答案