Ruby on rails 如何将具有相同数据结构的多个模型中的数据合并到视图中-Rails

Ruby on rails 如何将具有相同数据结构的多个模型中的数据合并到视图中-Rails,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我们有一个应用程序,它在Rails中有一系列模型,这些模型都具有相同的数据结构。我们现在要创建一个视图,在一个表中显示来自这些模型的所有数据。将其分离为许多模型的原因是,它们都来自不同的来源 因此,作为一名管理员,我希望一起查看所有数据 此数据为只读,因此无需写入 通过控制器,我可以将每个模型的信息捕获到一个数组中,如下所示: class WelcomeController < ApplicationController def index @dingoat = Dingoat

我们有一个应用程序,它在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 %>
class WelcomeController
现在在我看来,我如何“组合”这些信息?我可以单独显示,如下所示:

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
    
    <% render partial: "ding", collection: @dings %>
    
    class WelcomeController
    然后,视图简化为:

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

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

    def index
      @dings = Dingoat.all + Dongobe.all
    end
    
    那么在视图中,我建议调用这样的分部:

    class WelcomeController < ApplicationController
      def index
        @records = Dingoat.all + Dingobe.all
      end
    end
    
    <% render partial: "ding", collection: @dings %>
    
    
    
    那么_ding.html.erb部分可以是:

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

  • 非常感谢!当@infused回答fastestA时,将答案授予@infused很长时间,但你知道这将在ActiveAdmin中完成吗?不,但可能会有帮助。很长时间,但你知道这将在ActiveAdmin中完成吗?我没有使用ActiveAdmin。然而,我要说的是,如果你只有在最合适的时候才使用它。在我看来,它的最佳点是为一个模型提供一个简单的管理UI。如果你想走这条路,你需要将你的各种模型组合成一个模型,并以不同于单独模型的其他方式将它们区分开来。