1

User、Activity、ActivityRecord の 3 つのモデルがあります。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :first_name, :last_name, :email, :gender, :password, :password_confirmation, :remember_me
  # attr_accessible :title, :body

  has_many :activities 
  has_many :activity_records , :through=> :activities
end

class Activity < ActiveRecord::Base
  attr_accessible :point, :title
  belongs_to :user
  has_many :activity_records
end

class ActivityRecord < ActiveRecord::Base
    attr_accessible :activity_id
    belongs_to :activity

    scope :today, lambda { where("DATE(#{'activity_records'}.created_at) = '#{Date.today.to_s(:db)}'")}
end

今日のそれぞれのアクティビティ レコードのカウントと共に、ユーザーのすべてのアクティビティをクエリしたいと思います。たとえば、クエリを実行してjson形式に変換した後、次のようなものが必要です

[
   { 
      id: 23
      title: "jogging",
      point: "5",
      today_activity_records_count: 1,
   },
   { 
      id: 12
      title: "diet dinner",
      point: "2",
      today_activity_records_count: 0,
   },
]

どうすればそれを達成できるか教えてください。

ありがとう

4

2 に答える 2

1

これがあなたの望むものかどうかは完全にはわかりませんが、あなたが正しい方向に進むことができることを願っています:

User.joins(:activity_record)
    .group(:activity_id) 
    .select("'user'.id, title, point, count('activity_records'.id) as today_activity_records_count")

次に、その結​​果を試し.to_jsonてください。

それをテストする良い方法 (結果を確認できるようにするSQLため) は、Rails コンソールにあります。

編集:

質問をもう一度読んで、特定のユーザーのアクティビティを探していると思います。

Activity
    .joins(:activity_records, :user)
    .select("'activities'.id, title, point, COUNT('activity_records'.id) AS today_activity_records_count")
    .group("activities.id")
    .where(user_id: your_desired_user_id_here)
于 2013-06-29T03:18:32.360 に答える
0

これを試してください:

@activities = Activity.select("activities.id,activities.title,activities.point, COUNT(activity_records.id) AS today_activity_records_count").joins(:activity_records, :user).where("DATE(activity_records.created_at) = (?)", Time.now).group("activities.id")

jsonを出力したい場合

@activities.to_json
于 2013-06-29T03:46:45.483 に答える