我很难在使用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)
模型如下
Group.rb
has_many :memberships
has_many :users, through: :memberships
has_many :events
User.rb
has_many :memberships
has_many :groups, through: :memberships
has_many :confirmations
has_many :events, through: :confirmations
Event.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: '' })
}
答案 0 :(得分: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)
}
(您可以在群组模型中添加以下关系:)
has_many :events
has_many :confirmations, :through => :events
答案 1 :(得分:1)
所以你可以为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))
}
答案 2 :(得分:0)
当您尝试创建Feed活动时,请查看this gem,它可能对您有帮助。
你也可以看到这个railscasts