Rails 3 Ассоциации для трафика данных без внешнего ключа - PullRequest
0 голосов
/ 09 марта 2011

Мне нужно определить ассоциацию, которая, кажется, плохо вписывается в корзину "has_one / own_to".

Ситуация такова, у меня есть таблица, в которой каждая строка соответствует месячнойстатистика за данный месяц и год.Я хотел бы иметь возможность определить некоторые ассоциации в моей модели, такие как record.prior_month или record.prior_year, которые соответствуют предыдущему месяцу / году текущей записи.

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

Я всегда могу обработать логику в контроллере, но я быпредпочитаю оставить его вместе с моделью, если смогу.

Спасибо!Mike

Ответы [ 3 ]

0 голосов
/ 09 марта 2011

Как то так?

class MyModel < AR::Base
  def prior_month
    created_at.month
  end

  def prior_year
    created_at.year
  end
end

example = MyModel.last
example.prior_year
#=> 2010
example.prior_month
#=> 3
0 голосов
/ 09 марта 2011

Вы можете сделать это несколькими способами. Предполагая, что месяц хранится в модели.

Мой фаворит - это области видимости, так как он хорошо сочетается с другими ассоциациями.

Например, вы можете сделать:

class TrafficRecord < ActiveRecord::Base
  scope :only_month, lambda {|month| where :month => month} # this should also contain join conditions

  def prior_month
    self.class.only_month(self.month - 1) #decrement your month
  end
end
0 голосов
/ 09 марта 2011

Таким образом, вместо того, чтобы хранить месяц / год, также сохраняйте месяц + год * 12.Таким образом, март 2011 года - 24135

Таким образом, вы знаете, что в следующем месяце будет 21436, и вы можете легко разбивать записи на страницы.

TrafficGroup.order("month_calculated").paginate(:page=>params[:page])
...