Rails - 按created_at对记录列表进行分组

时间:2018-03-13 04:23:15

标签: ruby-on-rails ruby

我正在创建一个工作板,并且可以轻松浏览帖子,我希望在创建它们的那天将其分组。我当前的实现工作正常,但我想知道是否有更高效的方法来解决这个问题;关于在JobsController的 new 方法中添加两个实例变量的事情。

下面是列表的一个很好的结果,按降序排列:

3月11日

  • 工作F [id:6]
  • 工作E [id:5]
  • 工作D [id:4]

3月10日

  • 工作C [id:3]
  • 工作B [id:2]
  • 工作A [id:1]

JobsController< ApplicationController中

def index
  @jobs = Job.where(Job.arel_table[:created_at].gteq("%D")).order("created_at DESC")
  @job_days = @jobs.group_by { |job| job.created_at.to_date }
end

index.html.haml

- @job_days.each do |day, jobs|
  = day.strftime("%B %d")
  - jobs.each do |job|
    = link_to(job.url) do
      %h2= job.title
      %p= job.company

3 个答案:

答案 0 :(得分:1)

Job.where('your conditions').group_by(&:created_at)

答案 1 :(得分:0)

尝试以下查询:

@results = Job.(Job.arel_table[:created_at].gteq("%D")).
  order("created_at DESC").
  group_by {
    |job| job.created_at.strftime("%B %d")
  }

视图将变为:

<强> index.html.haml

- @results.each do |date, items|
  = date
  - items.each do |job|
    = link_to(job.url) do
      %h2= job.title
      %p= job.company

答案 2 :(得分:-1)

不仅仅是,

Job.where(‘your conditions’).group(“DATE(created_at)”)

工作?

PS:我没有测试,因为我是从手机中添加的。