Есть много способов сделать это. Вот несколько идей:
Вы можете добавить заказ и еще has_many
, так как вы действительно заботитесь о дате возврата:
has_many :book_check_outs, :order => "out_date asc"
has_many :current_book_check_outs, :conditions=>'return_date is null'
Тогда вы получите:
def checked_out?
current_book_check_outs.any?
end
def last_checked_out_to
if (book_check_outs.count > 0)
book_check_outs.last.person
else
Person.new()
end
end
Но я немного озадачен тем, как бы я использовал last_checked_out_to
. Я думаю, что предпочел бы, чтобы он вернул nil
, если у него нет последнего человека.
Вы должны проверить именованные области , так как они помогают строить эти динамические запросы модульно. Они бы неплохо сработали.
Хотя вы не используете людей (людей?) В этом коде, я бы немного переработал терминологию, чтобы она читалась лучше. book.persons
не совсем подходит для того, что говорит нам. Как библиотекари называют их? book.checker_outters
или что-то?