2013-05-22 2 views
0

Отказ от ответственности: Я относительно новичок в рельсах.Как запросить модель Rails/ActiveRecord на основе метода пользовательской модели?

У меня есть пользовательский метод в моей модели, на который я бы хотел запросить. Метод, называемый «active?», Возвращает логическое значение. То, что я действительно хотел бы сделать, это создать запрос ActiveRecord следующего вида:

Users.where(:active => true) 

Естественно, я получаю «столбец не существует», когда я бегу выше, как есть, так что мой вопрос заключается в следует:

Как сделать эквивалент выше, но для пользовательского метода на модели, а не для фактического столбца БД?

+0

Что это за активный? метод, чтобы определить, правда ли это? – Swards

+0

Независимо от того, заархивировано ли! = False && ли Time.now между start_date и end_date в родительской таблице – user456584

ответ

1

Вместо использования активных? метод, у вас будет возможность найти элементы, которые соответствуют.

Что-то вроде этого ...

def self.active 
    joins(:parent_table).where(:archived => false).where("? BETWEEN parent_table.start_date AND parent_table.end_date ", Time.now) 
end 

И, вы должны быть в состоянии сделать это

def active? 
    User.active.exists?(self) 
end 

Если вы хотите повторно использовать эту область для тестирования экземпляра.

+0

Это в дополнение к существующему методу 'active? '? Кроме того, когда я называю это позже, использую синтаксис 'Users.where (: active => true)' или что-то еще? – user456584

+0

Мое предположение было бы да для первого, возможно, просто 'User.active' для последнего? – user456584

+0

Вы бы назвали User.active (чтобы получить список), используйте это с другими областями и @ user.active? для проверки экземпляра. – Swards