我们有一个应用程序,它在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>