我有一个rails应用程序,它根据员工的日常生产显示统计数据。目前我的页面显示所有记录。
我知道如何显示各种不同的组合,例如两个日期之间的记录等......但我真正想要做的是使单页(比如索引页)有3个控件允许它在每日统计记录,每周统计记录和统计记录的自定义日期约束之间切换(例如从日期xx / xx / 2009到日期xx / xx / 2010)。我一直在寻找一段时间来试图解决这个问题,但我显然遗漏了一些东西,因为我找不到其他遇到同样问题的人。
如果这样做太难了,另一个 - 我可以看到这样做的最简单的方法是为每个视图创建一个页面,但是它仍然存在一个问题,我如何设置控件来选择自定义日期约束。
我提前为我的新见事做好准备,但是如果有人可以向我解释这一点,我认为这将真正增加我对铁轨的理解。提前致谢
答案 0 :(得分:0)
您的控件可以轻松地将一些信息附加到查询字符串。像这样的形式:
<form action="" method="get">
<fieldset>
<button type="submit" name="show" value="daily">Daily stats</button>
<button type="submit" name="show" value="weekly">Weekly stats</button>
</fieldset>
<fieldset>
From <input type="text" name="interval-start" value="" /> till
<input type="text" name="interval-end" value="" />
<button type="submit" name="show" value="interval">Stats for the specified interval</button>
</fieldset>
</form>
当用户点击某个按钮时,浏览器会将所有表单字段发送到服务器端。在服务器端,您可以在操作中检查show
数组的params
属性。像这样:
@reports = case params["show"]
when "daily"
#Just an example. Use ActiveRecord's query interface or Arel in Rails 3, not plain queries
Report.find_by_sql "SELECT * FROM reports WHERE DATE(report_date) = DATE(NOW())"
when "weekly"
Report.find_by_sql "SELECT * FROM reports WHERE WEEK(report_date) = WEEK(NOW())"
when "interval"
Report.find_by_sql "..."
else
#Some other possible values, filters, so on
end
在您的视图中,只需像往常一样输出@report
变量。
您还可以为该过滤创建新路线,可能是/reports/:name
,并避免使用表单。在这种情况下,您只创建一些指向右侧过滤器的链接(/reports/daily
,/reports/weekly
等)。在服务器端,您需要检查reports[:name]
是否有适当的值。