Rails列表在过去24小时内创建/更新了记录

时间:2014-04-04 00:58:56

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

我尝试使用activerecord列出最近创建的位置视图的记录或过去24小时内更新的记录,但我是初学者需要一些帮助。

有没有人知道在控制器/视图中实现这个的解决方案?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:32)

由于您正在使用Rails,我将假设您拥有这些文件,对应于Locations资源:

app/views/locations/index.html.erb
app/controllers/locations_controller.rb
app/models/location.rb

在过去24小时内,有一些ActiveRecord替代方法可用于查询记录:

  1. 此示例演示了您可以指定查询时间戳列的范围的概念。

    @locations = Location.where(updated_at: (Time.now - 24.hours)..Time.now)
    
  2. 正如下面的评论所指出的,上述查询可能只有一小部分精度错误。您可以存储变量now = Time.now,以确保您的查询完全跨越24小时。

    now = Time.now
    @locations = Location.where(updated_at: (now - 24.hours)..now)
    
  3. 您可以消除减法操作并让Rails为您处理,这也可能导致从24小时的精确窗口略微偏移。

    @locations = Location.where(updated_at: 24.hours.ago..Time.now)
    
  4. 您还可以放弃where参数中的哈希语法,传递使用>比较运算符过滤的SQL字符串。

    @locations = Location.where('updated_at > ?', 24.hours.ago)
    
  5. 在您的控制器中,使用您首选的查询方法添加索引操作:

    def index
      @locations = Location.where(updated_at: 24.hours.ago..Time.now)
    end
    

    在您的视图中,添加以下行:

    <table>
      <thead>
        <tr>
          <th>Id</th>
          <th>Name</th>
          <th>Created_At</th>
          <th>Updated_At</th>
        </tr>
      </thead>
      <tbody>
        <% @locations.each do |location| %>
          <tr>
            <td><%= location.id %></td>
            <td><%= location.name %></td>
            <td><%= location.created_at %></td>
            <td><%= location.updated_at %></td>
          </tr>
        <% end %>
      </tbody>
    </table>