Ruby on rails Rails:DRY方法的重构代码

Ruby on rails Rails:DRY方法的重构代码,ruby-on-rails,ruby,arrays,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(" ")

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

下面是一些代码:

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

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


如果你有一个相册模型,我会添加一个或多个表示查询的部分,然后在你的视图中将它们链接在一起(在末尾使用
collect
来格式化链接标记)。

你可以编写一个helper方法,但我认为你需要从一开始就重新考虑这行代码。你想完成什么?我想收集所有艺术家名称等于
@term
变量的独特流派。。。抱歉,如果代码太草率。。仍然在学习Ruby:PSo你只是想要一个艺术家流派的列表吗?是的,本质上它们只需要是唯一的就可以删除重复项。如果你已经正确地建立了协会,你可以使用
@artist.genres.uniq.map{| genre | genre.title}.join(“,”
)或类似的东西。
<%= raw @artist["albums"]["Albums"].collect { |album| link_to album["Genre"], genre_path(CGI::escape(album["Genre"])) unless album["Artist"]["Name"] != @term }.uniq.join(" ") %>