0

pg データベースを使用する Rails アプリでスコープを動作させるのに苦労しています。groups_controller.rb の表示ページで、created_at 順に並べられた 2 つの異なるタイプのデータを表示しようとしています。1つ目はグループに参加したユーザー、2つ目はグループのいずれかのイベントへの参加を確認したユーザーで、このように結果が混在する可能性があります

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

ユーザー.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

メソッド以来、beforeを使用できることを示すためだけに、この回答を追加します。

したがって、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 に答える
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 に答える
0

フィード アクティビティを作成しようとしている場合は、このgem を参照してください。役立つ場合があります。
こちらのレールキャストもご覧いただけます

于 2013-08-05T19:42:13.007 に答える