【问题标题】:Group and Count Inventory in Rails在 Rails 中对库存进行分组和计数
【发布时间】:2019-09-09 14:10:12
【问题描述】:

我正在 Rails 中创建一个电影租赁应用程序。我正在尝试创建一个视图来显示数据库中的每部电影,以及手头可用副本的数量。

我有一个 postgresql 数据库,其中有一个包含以下列的库存表:inventory_id、film_id、checkout_status。它的数据如下:

inventory_id 1,film_id 1,可用
inventory_id 2,film_id 1,可用
inventory_id 3,film_id 1,可用
inventory_id 4,film_id 2,可用
inventory_id 5,film_id 2,可用
inventory_id 6,film_id 2,可用
inventory_id 7,film_id 2,可用

我的模型设置为使电影有_many库存,库存属于_电影。

我有一个库存控制器,它将我的索引操作定义为:

    def index
      @inventory = Inventory.all
    end 

在我看来,我正在尝试遍历我的库存表(也访问电影表中的信息)以显示电影的标题、描述和可用副本的数量。这是我到目前为止所得到的:

    <% @inventory.each do |i|
      <%= i.film.title %>
      <%= i.film.description %>
    <% end %>

它给了我这样的电影清单:

电影 1,描述 1
电影 1,描述 1
电影 1,描述 1
电影 2,描述 2
电影 2,描述 2
电影 2,描述 2
电影 2,描述 2

我想要的是这样的:

电影 1,描述 1,计数:3
电影 2,描述 2,计数:4

我尝试了很多东西,但没有任何效果,我现在不知所措。有人可以帮忙吗?

【问题讨论】:

    标签: postgresql ruby-on-rails-5


    【解决方案1】:

    试试这个:

    def index
      @inventory = Inventory.select('distinct(film)')
    end 
    

    这将只带来实际库存中的电影,并且每部电影只有一个记录。

    还有:

    <% @inventory.each do |i|
      <%= i.film.title %>
      <%= i.film.description %>
      <%= Inventory.where(film_id: i.film_id).count %>
    <% end %>
    

    计数可以改进,也许在关联上使用计数器缓存,就像这里建议的那样:Rails order by results count of has_many association

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2022-07-27
      • 2015-09-24
      • 2023-01-10
      • 2011-01-02
      相关资源
      最近更新 更多