Допустим, у вас есть объект "Автор", у которого есть несколько книг, и вы хотите встроить некоторые методы в модель. Ваша базовая настройка выглядит примерно так:
class Author
def book_count(fiction = nil, genre = nil, published = nil)
end
end
Для каждого аргумента у вас есть несколько способов работы:
fiction = true #retrieve all fiction books
fiction = false #retrieve all nonfiction
fiction = nil #retrieve books, not accounting for type
genre = nil #retrieve books, not accounting for genre
genre = some_num #retrieve books with a specific genre id
published = true #retrieve all published
published = false #retrieve all unpublished
published = nil #retrieve books, not accounting for published
Теперь я написал для некоторых из них базовый оператор выбора, например:
if published == true
return self.books.select{ |b| b.published == true }.size
elsif published == false
return self.books.select{ |b| b.published == false}.size
else
return self.books.size
end
Когда у меня был один или два аргумента, это было громоздко, но достаточно просто. Однако, когда клиентский запрос добавляет больше условий к методу, он становится все более утомительным для написания.
Каким будет лучший способ "рельсов" справиться с этим?
Спасибо!