Найти и посчитать все профили с именем объекта отношения HABTM - PullRequest
0 голосов
/ 10 декабря 2011

В моем приложении Rails 3 есть две модели, Profile и Item.Каждый имеет отношения HABTM с другим.В моей модели профиля у меня есть метод wish_items, который создает массив с тем же именем (wish_items).Если элемент содержит категорию «желание», он добавляется в массив wish_items для этого профиля.

Для целей этого вопроса, скажем, у меня есть элемент с именем «телефон» с категорией «желание»,Что я хотел бы сделать, так это уметь находить и подсчитывать все профили, которые имеют «телефон» в массиве wish_items, чтобы я мог отобразить этот счет в виде.Мой код ниже.

Моя Profile.rb модель:

class Profile < ActiveRecord::Base
  has_and_belongs_to_many :items

  def wish_items
    wish_items = Array.new
    items.each do |item|
      if item.category == "wish"
        wish_items << item
      end
    end
    return wish_items
  end
end

Моя Item.rb модель:

class Item < ActiveRecord::Base
  has_and_belongs_to_many :profiles
end

У меня есть таблица соединений items_profiles дляэто отношения.Вот эта миграция:

class CreateItemsProfiles < ActiveRecord::Migration
  def self.up
    create_table :items_profiles, :id =>false do |t|
      t.references :item
      t.references :profile
    end
  end
...
end

Я видел этот предыдущий вопрос и дал ответ, но получил ошибку NameError: uninitialized constant phone.Вот код, который я попробовал из этого:

Profile.all(:include => :items, :conditions => ["items.name = ?", phone])

В частности, я поместил этот код в следующее:

<%= pluralize(Profile.all(:include => :items, :conditions => ["items.name = ?", phone])).count, "person") %>

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

1 Ответ

0 голосов
/ 11 декабря 2011

Выше не удалось, потому что у меня не было телефона в цитатах.Просто.Сработало следующее:

Profile.all(:include => :items, :conditions => ["items.name =  ?", "phone"])

И множественное число:

<%= pluralize(Profile.all(:include => :items, :conditions => ["items.name =  ?", "phone"]).count, "person") %>
...