新的ruby on rails用户在这里。我对以下几行代码有疑问。
视野中的第一个例子。
<% sailing.travelling_parties.each do |party| %>
<% party.party_registers.each do |reg| %>
<%= reg.user.detailed_user.first_name %>
<% end %>
<% end %>
当我在视图中运行它时,我得到了我打印出的多个名字的预期结果。当我将其移动到模型并将其更改为以下内容时,
第二个例子,在模型中。 **代表了我在整个例子中实际想要完成的事情。
class Sailing < ActiveRecord::Base
...
def gather_data
self.travelling_parties.each do |party|
party.party_registers.each do |reg|
reg.user.detailed_user.first_name
** use a variable to count loop iterations **
end
end
end
第二个例子,在视图中
<%= sailing.gather_data %>
这是打印出一个充满了&#39; travelling_parties&#39;我试图迭代,而不是我所期待的!所以,显然它只会循环一次,无论航行记录中有多少名字。
可以解释为什么会发生这种情况,以及如何让它像第一个例子一样工作,而不是实际将我的业务逻辑放在视图中?
由于
答案 0 :(得分:1)
您可以使用Array#map
,根据给定的块将数组转换为其他数组:
def gather_data
travelling_parties.map do |party|
party.party_registers.map do |reg|
reg.user.detailed_user.first_name
end
end
end
此方法返回具有名字的数组数组。如果您想获得一维数组,请使用flat_map
而不是第一个map
,如下所示:
def gather_data
travelling_parties.flat_map do |party|
party.party_registers.map do |reg|
reg.user.detailed_user.first_name
end
end
end