Предположим, у вас есть объект «Автор», который имеет несколько книг, и вы хотите создать некоторые методы в модели. Ваша основная установка выглядит примерно так:Комплексные комплекты выбора, Rails?
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
Когда я только имел один или два аргумента, это было громоздким, но достаточно легко. Однако, поскольку клиент запрашивает дополнительные условия для метода, становится все более утомительно писать.
Каким будет лучший способ «рельсов»?
Спасибо!
Являются ли эти объекты ActiveRecord, с которыми мы работаем, или простые классы Ruby? Кроме того, какая версия Rails? –
Это рельсы 2.3, и они являются объектами ActiveRecord. Причина, по которой я решил использовать select, а не find, заключается в том, что в большинстве случаев я использую этот метод, я уже вытащил больший выбор книг. –