有沒有一種模式可以將這樣的構造重構爲可讀的單行?Rails模型的常見重構模式
def show_section
@news = News.all_active
@news = @news.where(:section => params[:section]) unless params[:section] == "all"
@news = @news.all
end
我使用的Rails 3和Ruby 1.9.2
有沒有一種模式可以將這樣的構造重構爲可讀的單行?Rails模型的常見重構模式
def show_section
@news = News.all_active
@news = @news.where(:section => params[:section]) unless params[:section] == "all"
@news = @news.all
end
我使用的Rails 3和Ruby 1.9.2
@news = News.all_active.where(params[:section] == "all" ? nil : {:section => params[:section]})
可以擺脫@news.all
- Rails中,當您使用生成的ActiveRecord::Relation
對象(例如,當你調用3查詢將被執行其上有each
或first
)。通過nil
到where
方法將無能爲力。
如果all_active
是一種方法,您可以將它重構爲一個範圍,然後在鏈中調用它。
on Rails的3查詢大資源:
您可以打開where
條款進入一個方法在您的新聞模式:
class News
def self.for_section(section)
where(section == "all" ? nil : {:section => section})
end
end
然後在您的控制器,可以一起連鎖這一切就像這樣:
News.for_section(params[:section]).all_active
當然,這是假設all_active也是一個範圍,而不是一個結果。
非常感謝! – Fu86 2010-10-15 13:14:35
建立一個新聞範圍是一個好主意,謝謝! – Fu86 2010-10-15 13:14:13