Грязный объект с именованной областью видимости?

#mysql #ruby-on-rails #ruby

#mysql #ruby-on-rails #ruby

Вопрос:

Как использовать грязный объект с именованной областью видимости?

Этот named_scope работает нормально.

  named_scope :recently_tested, lambda{|test_id|
    {
      :conditions =>  ["test_id = ? and status = ?",test_id,PUBLISHED],
      :order => "updated_at DESC"
    }
  }
  

Я хочу улучшить его. Что-то вроде

  named_scope :recently_tested, lambda{|test_id|
    {
      :conditions =>  ["test_id = ? and status = ? and status_was = ?",test_id,PUBLISHED,PUBLISHED],
      :order => "updated_at DESC"
    }
  }
  

Возможно ли использовать грязный объект с named_scope? Есть ли другие способы справиться с этим сценарием?

Ответ №1:

Вспомогательная функция изменения status_was на самом деле не является полем в вашей базе данных.

При изменении объекта, changes , changed? и другие помощники, подобные вашему status_was , остаются только до тех пор, пока вы не сохраните объект.

Если вы хотите, чтобы это сохранялось, вам придется добавить поле status_was в вашу модель и просто заполнить его в before_save , например. Однако я бы не стал его вызывать status_was , потому что вы бы перезаписали вспомогательную функцию.