Rails: виртуальная ассоциация? - PullRequest
0 голосов
/ 22 января 2011

У меня есть модель Invoice, которая имеет атрибут status_id, эта модель относится к моделям Status.

Invoice.status_id может быть «0 => активный» или «2 => закрыт» в БД.

Дело в том, что в моей модели Status у меня также есть ": id => 1,: name => due", но это только когда Invoice.payment_date меньше, чем сегодня.

Поэтому мой вопрос: как я могу что-то наподобие

i = Invoice.find(:first)
i.status.name # i need this to return due if the Invoice.status_id == 0 and
              # Invoice.payment_date < Date.today

Очевидно, что приведенный выше код всегда возвращает имя, основанное на значении Invoice.status_id, потому что связь верна.имеет смысл, и кто-то может мне помочь.

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 января 2011

Есть ли причина, по которой статус должен быть моделью?Если нет, я бы сделал такой метод:

class Invoice < ActiveRecord::Base
  def status
    if closed?
      "closed"
    elsif payment_date < Date.today
      "due"
    else
      "active"
    end
  end
end

Затем добавьте логическое поле closed в таблицу счетов-фактур.

0 голосов
/ 08 февраля 2011

Я искал проблему неправильно. Как только я прочитал немного больше об ActiveRecord и searchlogic, мне пришло в голову: названная область видимости !!!

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