假設您有一個「作者」對象,它有幾本書,並且您想要在模型中構建一些方法。你的基本設置看起來是這樣的:複雜的選擇集,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
現在,我寫了一個基本的select語句對於一些這方面,沿線:
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? – 2010-11-04 16:14:59
它的軌道2.3,它們是ActiveRecord對象。我選擇使用select而不是find的原因是,在大多數情況下,我使用這種方法,我已經拉動了更多書籍。 – 2010-11-04 16:34:47