Ruby on Rails: как мне суммировать эти элементы в моей базе данных? - PullRequest
2 голосов
/ 18 марта 2011

У меня есть таблица video_votes со всеми голосами, для столбца с именем установлено значение 1 или -1.Я хочу суммировать все значения голосов видео и отобразить этот подсчет голосов.Во-первых, как я должен подвести итог, и во-вторых, я должен сохранить это значение в моей таблице видео?Если да, то как?

Ответы [ 4 ]

7 голосов
/ 18 марта 2011

Я бы начал с этого, пока производительность не стала проблемой:

class Video < AR::Base
  has_many :video_votes

  def vote_sum
    video_votes.sum(:value)
  end
end

class VideoVote < AR::Base
  belongs_to :video
  validates_inclusion_of :value, :in => [-1,1]
end

Как только производительность стала проблемой, и я хотел кэшировать суммированное значение, я мог бы сделать что-то вроде этого:

class Video < AR::Base
  has_many :video_votes

  # Override vote_sum attribute to get the db count if not stored in the db yet. 
  # The alternative is that you could remove this method and have the field
  # populated by a migration.
  def vote_sum
    read_attribute(:vote_sum) || video_votes.sum(:value)
  end
end

class VideoVote < AR::Base
  belongs_to :video
  validates_inclusion_of :value, :in => [-1,1]

  after_create :update_video_vote_sum

private

  def update_video_vote_sum
    video.update_attributes(:vote_sum => video.vote_sum + value)
  end
end

Ознакомьтесь с документацией по AR "Перезапись доступа по умолчанию" (прокрутите немного вниз) http://ar.rubyonrails.org/classes/ActiveRecord/Base.html

1 голос
/ 18 марта 2011

В вашей модели видео:

def total_votes
  self.votes.sum(:value)
end

Так что пример может быть:

@video.total_votes
0 голосов
/ 01 октября 2014

Я суммирую 2 поля на уровне модели:

  def update_sum_times
    update_attribute(:sum_of_fields, calc_two_dates)
  end

  def calc_two_dates
    date_one + date_two
  end
0 голосов
/ 18 марта 2011

Использовать метод ActiveRecord sum.

VideoVote.sum('value')

Вы не должны хранить его в одной таблице. Если у вас есть другие поля, которые вы хотите суммировать, то создайте «сводную» таблицу и периодически суммируйте поля и сохраняйте значения там. Другие методы вычисления ActiveRecord могут быть интересны в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...