Rails,模型方法返回数组而不是迭代结果

时间:2016-05-22 06:32:11

标签: ruby-on-rails

新的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;我试图迭代,而不是我所期待的!所以,显然它只会循环一次,无论航行记录中有多少名字。

可以解释为什么会发生这种情况,以及如何让它像第一个例子一样工作,而不是实际将我的业务逻辑放在视图中?

由于

1 个答案:

答案 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