如何在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
方法。
答案 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