我对Rails相当新,所以如果这是一个愚蠢的问题我会道歉。我试着在网上寻找答案,但我对术语并不十分肯定,所以我发现很难得到答案。
基本上,我有两个模型'Group'和'Category'。组has_one类别,类别belongs_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'))
其他各种各样的事情都在上面。
我真的很感激解决方案和/或指向我自己可以学习的地方!
非常感谢
答案 0 :(得分:4)
这应该快得多
@categories = Category.where(id: @groups.pluck(:category_id))
答案 1 :(得分:3)
我明白了!当你不知道它叫什么时,很难知道要搜索什么。这可以使用纯Ruby轻松完成,使用Array类的map
实例方法:
categories = groups.map{|g| g.category}
对此的简写方法是:
categories = groups.map(&:category)
map
数组方法为每个元素调用给定的块,并将所有返回值都滚动到数组中。
答案 2 :(得分:1)
我想不出一些魔术代码来插入,但你可以很容易地创建没有这个神奇代码的列表。
@categories = []
@groups.each do |group|
@categories << @group.category unless @categories.include?(@group.category)
end
@categories
现在包含所有类别的列表(每个类别仅包含一次)。