Как искать в массиве объектов в Ruby on Rails? - PullRequest
1 голос
/ 06 августа 2010

Это структура моей базы данных в Ruby on Rails:

пользователь имеет много заметок
заметки имеют много категорий
категории имеют много заметок

Я установил эту связьс has_many: через.Я использую

current_user.notes

, чтобы получить заметки, принадлежащие пользователю.Но как лучше всего получить заметки, принадлежащие текущему пользователю, которые имеют определенную категорию?Я должен использовать методы поиска, как на модели?Спасибо за чтение.

Ответы [ 3 ]

0 голосов
/ 06 августа 2010
class User < ActiveRecord::Base 
   has_many :notes  
   has_many :categories, :through => :notes 
end 

class Note < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
end 

class Category < ActiveRecord::Base 
    has_many :notes  
end 

@current_user.notes.all

Я думаю, вы должны разорвать отношения «многие ко многим» между заметками и категориями.

0 голосов
/ 06 августа 2010

вы можете добавить named_scope к заметкам

  named_scope :with_categories, 
              lambda{|cat|
                { 
                  :joins => [:categories],
                  :conditions => ["categories.id IN (?)", cat]
                }
              }

и тогда вы можете просто использовать

current_user.notes.with_categories(1, 2)
0 голосов
/ 06 августа 2010

Я считаю, что это должно быть:

current_user.notes.all(:joins => :categories, :conditions => ["categories.name = ?", search_parameter])

Просто обратите внимание, что при выполнении запроса INNER JOIN будет выполнен запрос LEFT JOIN, вы должны использовать :include:

current_user.notes.all(:include => :categories, :conditions => ["categories.name = ?", search_parameter])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...