从对象列表中获取关联对象的 Activerecord 列表

Dav*_*A-R 2 activerecord ruby-on-rails

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

基本上,我有两个模型“组”和“类别”。Groups has_one Categories,和 Categories own_to Groups。我想要做的是从组列表中获取类别列表。

像这样的东西:

@groups = Group.find(:all)
@categories = @groups。<< 插入魔术代码以获取类别 >>

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

<% @categories.each do |cat| %>  
    <%= cat.title %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

问题是我无法为我这些小鸡找出神奇的代码位,甚至无法准确地找出我需要寻找的东西来学习如何去做。

我尝试过的事情:

@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'))
Run Code Online (Sandbox Code Playgroud)

以及各种其他的上述内容。

我真的很感激一个解决方案和/或一个指向我可以自己学习的地方的指针!

非常感谢

Jai*_*yer 6

我明白!当你不知道它叫什么时,很难知道要搜索什么。这很容易用纯 Ruby 完成,使用mapArray 类的实例方法:

categories = groups.map{|g| g.category}
Run Code Online (Sandbox Code Playgroud)

对此的简写方法是:

categories = groups.map(&:category)
Run Code Online (Sandbox Code Playgroud)

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


Mïc*_*röv 5

这应该快得多

@categories = Category.where(id: @groups.pluck(:category_id))
Run Code Online (Sandbox Code Playgroud)