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