【问题标题】:Rails 'returning' method - One-liner to build Array from Multiple Arrays in Ruby?Rails 'returning' 方法 - 从 Ruby 中的多个数组构建数组的单线?
【发布时间】:2010-02-07 09:27:38
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby arrays


    【解决方案1】:

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

    sections.map(&:questions).flatten
    

    或者,如果方法是在 ActiveRecord 模型中定义的,您可以将其声明为 has_many :questions, :through => :sections,而您根本不必定义该方法。

    【讨论】:

    • 谢谢!这正是我一直在寻找的,现在说得通了。
    【解决方案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
    

    【讨论】:

      【解决方案3】:

      你可以使用地图或收集,像这样

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

      但是,我认为您不能使用符号来执行此操作,因为您不只是调用集合上的方法。

      【讨论】:

        【解决方案4】:

        看不到任何障碍:

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

        【讨论】:

          猜你喜欢
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          • 1970-01-01
          • 2020-09-07
          相关资源
          最近更新 更多