Частично проблема в том, что вы определяете метод класса с именем find_current и метод экземпляра с именем filter_my_rows. Как правило, вы определяете их обоих в одной области видимости, чтобы они работали вместе.
Другое дело, что вы можете выполнить необходимую фильтрацию простым вызовом Array # reject. Например:
@models = all.reject do |m|
# This block is used to remove entries that do not qualify
# by having this evaluate to true.
!m.current
end
Вы также можете модульно это сделать, подключая функции по мере необходимости, но это может быть чрезвычайно сложно, если вы не будете осторожны.
# Define reusable blocks that are organized into a Hash
CONDITION_FILTERS = {
:current => lambda { |m| m.current }
}
# Array#select is the inverse of Array#reject
@models = all.select(CONDITION_FILTERS[:current])
В то время как вы указали в своем вопросе, что это было необходимо только из-за опасений по поводу невозможности определить релевантность конкретной записи до того, как все записи будут загружены из базы данных, это, как правило, дурной тон, поскольку вы, вероятно, будете отклонять большое количество данных, которые вы испытали в процессе извлечения и создания экземпляров в качестве моделей только для немедленного их удаления.
Если возможно, вы должны по крайней мере кэшировать извлеченные строки на время запроса, чтобы вам не приходилось извлекать их снова и снова.