Rails:重构DRY方法的代码

时间:2011-10-11 01:28:52

标签: ruby-on-rails ruby arrays

我有一些代码,我循环遍历数据,我不得不多次编写相同的代码,我想“干掉它”。

以下是一些代码:

<%= 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(" ") %>

1 个答案:

答案 0 :(得分:0)

看起来您正在视图中模拟GROUP BY查询。特别是您的@term子句看起来像WHERE条件或连接约束。

如果您有相册模型,我会添加一个或多个代表查询部分的named scopes,然后在视图中将它们链接在一起(最后使用collect格式链接标签。)