【问题标题】:Get Activerecord list of associated objects from list of objects从对象列表中获取关联对象的 Activerecord 列表
【发布时间】:2015-11-12 03:50:00
【问题描述】:

我对 Rails 还很陌生,所以如果这是一个愚蠢的问题,我深表歉意。我试过在网上寻找答案,但我对术语并不完全确定,所以我发现很难得到答案。

基本上,我有两个模型“组”和“类别”。组 has_one 类别和类别属于_to 组。我正在尝试做的是从组列表中获取类别列表。

类似这样的:

@groups = Group.find(:all)
@categories = @groups.>

所以我可以在视图中做这样的事情:

<% @categories.each do |cat| %>  
    <%= cat.title %>
<% end %>

问题是我无法弄清楚神奇的代码位,甚至是我需要寻找的东西才能学习如何做到这一点。

我尝试过的事情:

@categories = @groups.categories
@categories = @groups.category
@categories = @groups.category.find(:all, :select => 'title')
@categories = Category.find(:all, @groups.categories)
@categories = Category.find(:all, @groups.categories.find(:all, :select => 'title'))

以及上述的各种其他方面。

我非常感谢一个解决方案和/或指向我可以自己学习的地方!

非常感谢

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    我明白了!当您不知道它叫什么时,很难知道要搜索什么。这可以通过纯 Ruby 轻松完成,使用 Array 类的 map 实例方法:

    categories = groups.map{|g| g.category}
    

    对此的简写方法是:

    categories = groups.map(&:category)
    

    map 数组方法为每个元素调用给定块,并将所有返回值滚动到一个数组中。

    【讨论】:

      【解决方案2】:

      这应该快得多

      @categories = Category.where(id: @groups.pluck(:category_id))
      

      【讨论】:

        【解决方案3】:

        我想不出一些要插入的魔法代码,但是没有这个魔法代码你可以很容易地创建列表。

        @categories = []
        @groups.each do |group|
          @categories << @group.category unless @categories.include?(@group.category)
        end
        

        @categories 现在包含所有类别的列表(每个类别仅包含一次)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-16
          • 2020-09-11
          相关资源
          最近更新 更多