【问题标题】:Get db records from today and tomorrow in Rails?在 Rails 中获取今天和明天的数据库记录?
【发布时间】:2013-03-29 19:25:37
【问题描述】:

我想要的最终结果是我想将 events#index 页面上的事件按 3 个时间段进行分组:今天、明天和本周。理想情况下,它应该按访问者的时区排序,但如果重要的话,主要用例是 EST。

这只是一个相当简单的 Rails 应用程序,您可以在这里查看: https://github.com/moizk/events

我对 Rails 还很陌生,所以我假设这种事情由 Controller 处理,并创建三个实例变量而不是:

@events = Event.all

应该是这样的:

@todaysevents = Events.where(some logic in here)
@tomorrowsevents = Events.where(some logic in here)

我只是想不通这个逻辑应该是什么。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我建议向模型添加三个范围,将 event_start_at 替换为您正在使用的任何时间字段:

    class Event < ActiveRecord::Base
      scope :today, lambda { where(event_start_at: Time.zone.now.all_day }
      scope :tomorrow, lambda { where(event_start_at: 1.day.from_now.all_day }
      scope :this_week, lambda { where(event_start_at: Time.zone.now.all_week }   
    end
    

    并在控制器中使用它们:

    @events_today = Event.today
    @events_tomorrow = Event.tomorrow
    @events_this_week = Event.this_week
    

    如果您遵循我非常喜欢的 Sandi Metz 的“每个操作一个实例变量”规则,您可能更愿意将这些事件包装在一个对象中:

    @events = {
      today: Event.today,
      tomorrow: Event.tomorrow,
      this_week: Event.this_week
    }
    

    然后在视图中使用它们,例如@events[:today]@events[:tomorrow], @events[:this_week]

    您甚至可以将哈希封装在 OpenStruct 中以允许 @events.today@events.tomorrow@events.this_week,但这很可能属于自行车脱落领域。

    【讨论】:

    • 所以我将它添加到我的控制器中:@events_today = Events.today 这到我的模型中:scope :today, lambda { where(event_start_date: Time.zone.now.all_day) } 这是视图循环:&lt;% @events_today.each do |event| %&gt; 应用程序返回错误:undefined method today for Events:Module
    • 因为我是个白痴,应该读为Event,而不是Events。修复。
    • @MoizKhanMalik 您可以考虑将时间注入范围以使其更普遍有用:scope :today, lambda {|time = Time.zone.now| where(event_start_at: time.all_day) }。然后你可以说scope :tomorrow, lambda { today(1.day.from_now) }
    • 回复:Sandi Metz 的每次操作一个实例 - 创建快速演示者的巧妙方法,但这不就是将所有实例变量放在哈希中吗?
    • @Swards 是的,但是封装总是“只是”将相关的东西放在一个地方;)在这种情况下,你可以从中获得多少价值。我认为提及它很有用,但过于切题,无法包含完整的“将其放在演示者中”的文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多