0

我很难获得在带有 pg 数据库的 Rails 应用程序中工作的范围。在 groups_controller.rb 的显示页面中,我试图显示由 created_at 排序的两种不同类型的数据。第一个是加入群组的用户,第二个是确认参加该群组的任何活动的用户,结果可以像这样混合在一起

user joined group  (7 minutes ago)
user confirmed attendance (10 minutes ago)
user joined group (15 minutes ago)

型号如下

组.rb

has_many :memberships
has_many :users, through: :memberships

has_many :events

用户.rb

has_many :memberships
has_many :groups, through: :memberships

has_many :confirmations
has_many :events, through: :confirmations

事件.rb

 has_many :confirmations
 has_many :users, through: :confirmations

在 groups_controller.rb 的 show 动作中,我创建了一个像这样的 recent_activities 动作,传递 Time.now 以使用它来获取过去 24 小时的所有结果

def show
@recent = Group.recent_activities(Time.now)

end 

但是,在 group.rb 中编写方法时,我遇到了问题。例如,使用这种格式

where( memberships: {created_at: ''}

我不知道如何在过去 24 小时内或过去 7 天内计算。我确定我尝试这样做还有其他问题。有小费吗?在我的生活中,我只写了一些这样的查询,所以它们都出现了畸形

Group.rb

 scope :recent_activities, lambda {|time|
    joins(:user, :membership, :confirmation, :event).
    where( memberships: {created_at: ''},
           confirmations: {created_at: '' })

  }
4

3 回答 3

1

试试这个:

scope :recent_activities, lambda{ |time|
  joins({:memberships => :users}, {:events => :confirmations}).
  where('CAST(memberships.created_at as DATE) > :yesterday 
         AND CAST(confirmations.created_at as DATE) > :yesterday', 
         yesterday: Date.today - 1.days)

}

(您可以在 Group 模型中添加以下关系:)

has_many :events
has_many :confirmations, :through => :events
于 2013-08-05T19:24:30.480 回答
1

添加此答案只是为了表明您可以使用ago , since方法。

因此,您可以对time参数的“自最近 24 小时以来”执行类似的操作。

scope :recent_activities, lambda {|time|
  joins(:user, :membership, :confirmation, :event).
  where("memberships.created_at >= :twenty_four_hours_ago and confirmations.created_at >= :twenty_four_hours_ago", twenty_four_hours_ago: 24.hours.ago(time))
}
于 2013-08-05T19:38:10.180 回答
0

当您尝试创建提要活动时,请查看gem,它可能会对您有所帮助。你也
可以看到这个railscasts

于 2013-08-05T19:42:13.007 回答