如何使用页面上的按钮更改页面上显示的记录(RoR)

时间:2010-09-04 07:22:21

标签: ruby-on-rails model-view-controller date

我有一个rails应用程序,它根据员工的日常生产显示统计数据。目前我的页面显示所有记录。

我知道如何显示各种不同的组合,例如两个日期之间的记录等......但我真正想要做的是使单页(比如索引页)有3个控件允许它在每日统计记录,每周统计记录和统计记录的自定义日期约束之间切换(例如从日期xx / xx / 2009到日期xx / xx / 2010)。我一直在寻找一段时间来试图解决这个问题,但我显然遗漏了一些东西,因为我找不到其他遇到同样问题的人。

如果这样做太难了,另一个 - 我可以看到这样做的最简单的方法是为每个视图创建一个页面,但是它仍然存在一个问题,我如何设置控件来选择自定义日期约束。

我提前为我的新见事做好准备,但是如果有人可以向我解释这一点,我认为这将真正增加我对铁轨的理解。提前致谢

1 个答案:

答案 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]是否有适当的值。