【问题标题】:How to merge multiple objects from different models into one object in Rails?如何将来自不同模型的多个对象合并为 Rails 中的一个对象?
【发布时间】:2019-06-07 05:43:16
【问题描述】:

我想知道是否有一种优雅的方法可以将来自不同模型的多条记录合并到一个新对象中?

案例是构建应用内容的“流”或“源”,例如在 Facebook 中。

详细来说,每条记录都有多个不同的列。这是模型和列:

  • 产品[名称、价格]

  • 发布[标语,图片]

  • 成员[姓名、用户名、个人资料]

  • 选择[名称,标语]

我试过的代码:

@new_object = @product = Product.find(n) + @post = Product.find(n) + @member = Member.find(n) + @selection = Selection.find(n)

但是由于字段的差异,这不起作用。我想我们必须映射成一个哈希?

这就是我将如何使用最终对象:

@new_object.each do |stream|
  stream.foo
  stream.bar
end

因此,目标:获取每条记录并使用 .each 显示内容 奢侈品:有机会随机排序结果。

非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby hash hashmap


    【解决方案1】:

    您可以创建一个 PORO(普通旧 ruby​​ 对象)来表示组合对象,如下所示:

    class Stream 
      attr_accessor :product, :post, :member, :selection
    
      def initialize(attrs)
        assign_attributes(attrs)
      end
    end
    

    然后只需 initialize 并使用 Stream.new(attrs) 创建任意数量的 stream 对象。您可以创建一个 stream 对象数组并循环遍历它们以呈现或显示多个 stream 数据。

    要按属性对对象数组进行排序,您可以使用

    objects.sort_by {|obj| obj.attribute}

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2019-02-07
      • 2021-10-29
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多