2011-01-21 2 views
0

У меня есть модель счета-фактуры, которая имеет атрибут status_id, эта модель относится к моделям состояния.Rails: Виртуальная ассоциация?

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

Вещь в моей модели статуса У меня также есть «: 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, поскольку объединение является правильным.

Надеюсь, это имеет смысл, и кто-то может мне помочь.

Спасибо.

+1

Что такое приведенный выше код для вас? И вы говорите: * Очевидно, что приведенный выше код всегда возвращает имя на основе значения Invoice.status_id, потому что ассоциация правильная. * - так в чем проблема? – Zabba

+0

не проблема, это то, что я не знаю, как переопределить это поведение. Мне нужно, чтобы модель Status знала результат Invoice.status_id, и когда этот метод (Invoice # status_id, yes i переопределил атрибут с помощью метода) возвращает 5, возвращается статус с идентификатором 5. Сегодня возвращаемое состояние основано на значении value_id db. – pbruna

ответ

1

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

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

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

+0

Я бы просто использовал simple_enum: https://github.com/lwe/simple_enum – Zabba

+0

Но он изменился с активной на автоматически, когда пройдет дата. Он не хочет обновлять поле в этот день. – mckeed

+0

Я думаю, что это должна быть модель, потому что также я должен быть в состоянии отфильтровать счет-фактуру по статусу – pbruna

0

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

Смежные вопросы