Rails'返回'方法 - 在Ruby中使用多个数组构建数组的一行程序?

时间:2010-02-07 09:27:38

标签: ruby-on-rails ruby arrays

如何在ruby中将以下内容转换为清晰的单行内容?

def questions
  results = []
  sections.each do |section|
    results = results.concat(Question.find_all_by_survey_section_id(section.id))
  end
  results
end

我觉得我可以用某种方式使用&:Symbol#to_proc)和returning方法。

4 个答案:

答案 0 :(得分:2)

def questions
  sections.map do |section|
    Question.find_all_by_survey_section_id(section.id)
  end.flatten
end

def questions
  sections.inject([]) do |all, section|
    all.concat Question.find_all_by_survey_section_id(section.id)
  end
end

答案 1 :(得分:2)

假设SurveySection has_many :questions,您可以将其简化为:

sections.map(&:questions).flatten

或者,如果在ActiveRecord模型中定义了该方法,则可以声明它为has_many :questions, :through => :sections,而您根本不需要定义该方法。

答案 2 :(得分:0)

你可以使用map或collect,就像这样

def questions
  sections.map{|section| Question.find_all_by_survey_section_id(section.id)}.flatten
end

但是,我不认为你可以使用符号来处理这个因为你不只是在集合上调用一个方法。

答案 3 :(得分:0)

看不到障碍物:

def questions
  sections.map(&:id).flat_map(&Question.method(:find_all_by_survey_section_id))
end