Вычисляемое поле в RoR (действует как метод ActiveRecord)
-
20-09-2019 - |
Вопрос
Я создаю приложение для когнитивных тестов в Rails.
У меня есть несколько тестов (Quiz
объекты) для моих посетителей.На домашней странице я хочу показывать только те тесты, которые готовы к употреблению:у них должно быть несколько вопросов и несколько возможных ответов.
Конечно, я мог бы выполнить запрос с помощью SQL или создать метод класса, повторяющий попытку всех объектов, где Quiz.questions.size > 1 && Quiz.answer.size > 1
.Тем не менее, я бы хотел более элегантный / абстрактный способ.
Есть ли способ запросить "готовый" метод, действующий так, как если бы это был метод ActiveRecord, чтобы я мог вызвать Quiz.find_all_by_ready(1)
и положил ready
в любом состоянии теста?Кэширование - это возможность, мне было интересно, есть ли динамическая альтернатива.Как бы гуру rails решил эту проблему?
Ваше здоровье,
Давиде
Решение
Используя комбинацию named_scope и counter_caches, вы могли бы сделать что-то вроде этого:
class Quiz < AR:B
named_scope :ready, :conditions => ['quizes.questions_count > 0 AND quizes.answers_count > 0']
end
@quizes = Quiz.ready
Я надеюсь, что это поможет!