如何将来自多个具有相同数据结构的模型的数据组合到一个视图中——Rails



我们有一个应用程序,它在Rails中有一系列模型,这些模型都具有相同的数据结构。我们现在想创建一个视图,将这些模型中的所有数据一起显示在一个表中。之所以将其分离为许多模型,是因为它们都来自不同的来源。

因此,作为一名管理员,我想一起查看所有数据。

此数据是只读的,因此不需要写入。

有了控制器,我可以将每个模型中的信息抓取到一个数组中,如下所示:

class WelcomeController < ApplicationController
  def index
    @dingoat = Dingoat.all
    @dingobe = Dingobe.all  
  end
end

现在,在我看来,我该如何"组合"这些信息?我可以单独显示,就像这样:

<% @dingoat.each do |dingoat| %>
  <li><%= dingoat.ProductName %></li>
<% end %>
<% @dingobe.each do |dingobe| %>
  <li><%= dingobe.ProductName %></li>
<% end %>

我建议您将这些组合到一个单独的模型中,并添加:source属性来区分源。也就是说,如果你真的想单独使用它们,你可以像这样组合控制器中的记录:

class WelcomeController < ApplicationController
  def index
    @records = Dingoat.all + Dingobe.all
  end
end

然后视图简化为:

<% @records.each do |record| %>
  <li><%= record.product_name %></li>
<% end %>

由于没有足够的细节来进行全面诊断,我不会试图讨论将这些数据拆分为单独的模型是否真的是个好主意,但足以说明它指向了一个可能的设计问题。然而,将所有记录放入一个公共集合以只读方式输出是非常容易的:

def index
  @dings = Dingoat.all + Dongobe.all
end

然后在视图中,我建议调用这样的部分:

<% render partial: "ding", collection: @dings %>

那么_ding.html.erb部分可以是:

<li><%= ding.ProductName %></li>

最新更新