Mongoid/Rails has_and_belongs_to_many возвращает значение true в цикле - почему?

У меня есть две модели (продукт и категория):

class Product

    include Mongoid::Document
    include Mongoid::Timestamps

    field :name,            type: String
    field :enabled,         type: Boolean
    field :price,           type: BigDecimal
    field :sku,             type: String
    field :editing,         type: Boolean
    field :supplier,        type: String

    has_and_belongs_to_many             :categories
    has_and_belongs_to_many             :subcategories

    validates :name, presence: true, uniqueness: true
    validates :price, presence: true

end

class Category

    include Mongoid::Document
    include Mongoid::Timestamps

    field :name,            type: String
    field :editing,         type: Boolean
    field :enabled,         type: Boolean

    has_and_belongs_to_many             :subcategories
    has_and_belongs_to_many             :products

    validates :name, presence: true, uniqueness: true

end

Как вы можете видеть, оба имеют has_and_belongs_to_many отношения. Все работает, как и ожидалось, при сохранении / получении данных:

@products = Products.all

который вернет этот JSON:

{
    _id: ObjectId("54ba495957694d4d95010000"),
    category_ids: [
        ObjectId("54ba494557694d4d95000000")
    ],
    created_at: ISODate("2015-01-17T11:36:57.641Z"),
    enabled: false,
    name: "Product 1",
    price: "23.9",
    sku: "KOPP0909",
    updated_at: ISODate("2015-01-17T11:36:57.641Z")
}

Все идет нормально. На мой взгляд, я переберу такие продукты:

@products.each do |p|
    p.categories.each do |c|
        c.name
        ...

Который вернется отображать название категории, как и ожидалось. Проблема, которую я имею, в то время как приведенный выше код вернет категорию (и), как и ожидалось, он также напечатает true в конце этого (в случае объекта выше):

Category 1 а также true

Что это такое? Как я могу удалить это?

1 ответ

Решение

Как сказал @phoet, псевдокод мешает нам точно знать, что происходит, но я собираюсь предположить, что вы делаете что-то столь же простое, как вывод значения вашего цикла, а не зацикливание и вывод только категорий. Например, обратите внимание на знак равенства в следующих примерах, который выводит некоторое значение самого объекта в дополнение к вложенному выводу:

В ERB:

<%= for @products.each do |p| %>
  <%= p.categories.each do |c| %>
    <%= c.name %>
  <% end %>
<% end %>

против

<% for @products.each do |p| %>
  <% p.categories.each do |c| %>
    <%= c.name %>
  <% end %>
<% end %>

В ХАМЛ:

= for @products.each do |p|
  = p.categories.each do |c|
    = c.name

против

- for @products.each do |p|
  - p.categories.each do |c|
    = c.name
Другие вопросы по тегам