Как сохранить «общее» количество этой полиморфной модели в связанных моделях (Rails)? - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть модель с именем Голосование , которая имеет полиморфную ассоциацию с двумя другими моделями: Микросообщения и Комментарии .

Вот их ассоциация:

micropost.rb:

class Micropost < ActiveRecord::Base
  belongs_to :user

  has_many :comments, :dependent => :destroy
  has_many :votes, :as => :votable, :dependent => :destroy 
end

comment.rb:

class Comment < ActiveRecord::Base
  belongs_to :micropost, :counter_cache => true
  belongs_to :user

  has_many :votes, :as => :votable, :dependent => :destroy 
end

vote.rb:

class Vote < ActiveRecord::Base
  belongs_to :votable, :polymorphic => true
  belongs_to :user
end

Модель Голосование имеет столбец с именем polarity (для голосования +1 и голосования -1). Я хотел бы добавить total (сумма polarity всех голосов поста или комментария) к каждому экземпляру модели Post and Comment.

Как лучше всего это сделать?

* +1034 * Пример: * * одна тысяча тридцать пять

Пост (: id = 2)

Голосовать (: полярность = 1) Голосовать (: полярность = -1) Голосовать (: полярность = 2)

Запись с ID 2 имеет: 2 голосов

1 Ответ

1 голос
/ 07 февраля 2012

Вы можете создать метод экземпляра в моделях Post и Comment, например:

def total
  self.votes.map {|v| v.polarity }.sum
end

Затем введите @post.total или @comment.total

Или вы можете создать помощникакоторый может сделать то же самое:

def total object
  object.votes.map {|v| v.polarity }.sum
end

Затем положить <%= total @post %> или <%= total @comment %>

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