2011-10-11 79 views
0

我有一些代碼循環遍歷數據,我不得不多次編寫相同的代碼,而且我想「幹掉它」。Rails:DRY方法的重構代碼

下面是一些代碼:

<%= raw @artist["albums"]["Albums"].uniq_by{ |a| a["Genre"] }.collect { |album| link_to album["Genre"], genre_path(CGI::escape(album["Genre"])) unless album["Artist"]["Name"] != @term }.join(" ") %> 

,我不必重複多次進行到底unless album["Artist"]["Name"] != @term反正是有過濾器陣列不必編寫這一點,除非聲明每次更好的作品呢?

希望是有道理的

我能夠做縮短代碼移除uniq_by

<%= raw @artist["albums"]["Albums"].collect { |album| link_to album["Genre"], genre_path(CGI::escape(album["Genre"])) unless album["Artist"]["Name"] != @term }.uniq.join(" ") %> 
+0

那麼你可以寫一個輔助方法,但我認爲你需要從頭開始重新考慮這一行代碼。你想達到什麼目的? – bricker

+0

我想收集所有獨特的流派,其中藝術家的名字等於'@ term'變量...對不起,如果代碼是馬虎......仍然學習Ruby:P – dennismonsewicz

+0

所以你只需要一個藝術家的流派列表? – bricker

回答

0

它看起來就像你在你看來仿效GROUP BY查詢。特別是您的@term子句看起來像是WHERE條件或連接約束。

如果您有圍繞相冊樣板,我會(在最後一個collect格式化鏈接標記。)添加一個或多個named scopes代表的部分查詢,然後就在你看來鏈條中的人一起