如果在JSON中有两个或更多相同的周数,则返回最后一周的周数

时间:2014-03-31 08:03:29

标签: ruby-on-rails ruby-on-rails-4

如果在JSON中有两个或更多相同的周数,则返回最后一周的周数。查看示例。谢谢。

控制器中的方法。

def all
  @weekly_updates = current_user.user_updates.latest.offset(params[:offset] || 0)
end

计算周数的模型中的方法:

class UserUpdate < ActiveRecord::Base
  def week_number
    return 1 unless user.first_program_started_at.present?
    (((created_at.utc) - user.first_program_started_at.utc.beginning_of_day) / 86400 / 7).ceil.to_i || 1
  end
end

JSON:

json.weekly_updates @weekly_updates do |j1,  weekly_update|
  j1.week_number weekly_update.try(:week_number)
end

示例:

"weekly_updates":
[
  {
    "id":25392,
    "created_at":"2014-03-21T10:13:54+04:00",
    "week_number":2
  }
  ,
  {
    "id":25393,
    "created_at":"2014-03-20T23:59:59+04:00",
    "week_number":2
  }
  {
    "id":25394,
    "created_at":"2014-03-26T23:59:59+04:00",
    "week_number":3
  }
]

应该得到这个。

"weekly_updates":
[
  {
    "id":25393,
    "created_at":"2014-03-20T23:59:59+04:00",
    "week_number":2
  }
  {
    "id":25394,
    "created_at":"2014-03-26T23:59:59+04:00",
    "week_number":3
  }
]

1 个答案:

答案 0 :(得分:0)

我刚刚碰到这个并且它在我的测试中起作用了:

def all
  @weekly_updates = current_user.user_updates.maximum(:id, :group => week_number)
end

(但是将周数作为实际行)