【问题标题】:How to iterate over multiple model results in Rails 3?如何在 Rails 3 中迭代多个模型结果?
【发布时间】:2010-11-09 02:49:58
【问题描述】:

我不确定我在这里做错了什么。我发现很多例子表明我这样做是正确的,而且我知道这是非常基本的东西。

我有点简单,但我有两个模型,“Post”和“Category”。我正在尝试从数据库中获取类别列表并按名称列出它们。

class Post < ActiveRecord::Base
   has_and_belongs_to_many :categories  
end

class Category < ActiveRecord::Base
   has_and_belongs_to_many :posts  
end

# get all categories and output the names
cats = Category.all
cats.each do |cat|
   cat.name
end

它似乎输出了整个检索结果数组。所有结果,甚至不仅仅是我正在迭代的结果。什么给了?

【问题讨论】:

  • 你期待什么输出?

标签: ruby-on-rails arrays activerecord


【解决方案1】:

您将 .each 循环代码放在哪里?您指的“输出”代码在哪里?如果您在视图中使用循环,请确保您正在使用

<% %>

而不是

<%= %>

用于循环线本身。如:

<% Category.all.each do |cat| %>
  <%= cat.name %>
<% end %>

【讨论】:

    【解决方案2】:

    Category.all 返回一个包含所有类别对象的数组,即类别表包含的所有内容。因此,cats 是所有类别的数组。我不确定你为什么认为你只是在迭代任何东西的“一个”。要获得一个结果,您可以使用find()first

    cat = Category.first
    puts cat.name
    

    如果你想要所有的名字,你可以这样做:

    Category.all.map(&:name)
    

    或者,更有效一点,尤其是在有很多字段的情况下:

    Category.all(:select => :name).map(&:name)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      相关资源
      最近更新 更多