Как добавить свойство count к элементу в коллекции в Rails? - PullRequest
1 голос
/ 28 января 2010

У меня есть модель данных с участием пользователей и наград, и к ней добавлена ​​таблица user_awards.

class User < ActiveRecord::Base
  :has_many :user_awards
  :has_many :awards, :through => :user_awards  # awards the user has won
end

class Award < ActiveRecord::Base
  :has_many :user_awards
  :has_many :users, :through => :user_awards
end

Я бы хотел, чтобы было свойство times_won, чтобы я мог определить, сколько раз пользователь выиграл конкретную награду. (Каждое предоставление награды - это строка в таблице соединений user_awards)

т.е. Я хотел бы к этому:

>> user = User.find(777)
>> award = user.awards[0]
>> award.times_won  # and get the number of times  
                    # this user has won this particular award

Пока что я добавил метод Award.times_won_by (пользователь), но мне интересно, есть ли способ обернуть награду, когда она находится в этом контексте user.award, чтобы я знал, сколько раз она была выиграна , Я не могу добавить свойство динамически, так как я просто получаю NoMethodError

1 Ответ

1 голос
/ 28 января 2010

Имея только награду, у вас нет возможности узнать, на какого пользователя вы ссылаетесь (что вы узнали при необходимости использовать award.times_won(user).

Соответствует ли следующее вашим случаям использования?


class User &lt ActiveRecord::Base
  def award_counts
    @count_hash ||= self.user_awards.count(:all,:group=>:award_id)
  end

  def award_count(award_id) 
    award_counts[award_id] || 0
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...