2013-02-19 3 views
0

Я работаю над внедрением системы тегов, и у меня возникают проблемы с запросом на тегированные объекты с помощью области.Определение метода класса current_user

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

def self.tagged_with(name) 
    Tag.find_by_name(name).items 
end 

Однако у этого есть проблемы. Если бы я должен был сделать что-то вроде: current_user.items.tagged_with(name) не будет ли этот существующий метод возвращать ВСЕ элементы, а не только элементы, принадлежащие current_user? Я предполагаю, что это просто проблема с запросом, но я не могу понять, как изменить метод класса на то, что называется коллекцией. Я попытался сделать обратный путь, чтобы получить коллекцию через теги, что-то вроде ... tag.items.where(:user_id => current_user.id), но в этом случае это отношения «многие-ко-многим», и я не смог получить большой палец на этом ,

Каков правильный способ ограничения запроса?

+0

Можете ли вы показать ваши отношения? Правильно ли я предполагаю, что вы используете 'act_as_taggable'? – mathieugagne

ответ

1

Создайте ассоциацию на своем классе User, который указывает на ваш класс Tag.

class User < ActiveRecord::Base 
    has_many :tags 
end 

Тогда вы можете сделать: current_user.tags.where(...)

Если вы уже не имеете связи на месте, вам необходимо создать миграцию, чтобы иметь tags таблицы ссылки вашего users таблицы с иностранным ключ.

0

Я думаю, что это поможет вам:

class Account < ActiveRecord::Base 
     has_many :people do 
      def find_or_create_by_name(name) 
       first_name, last_name = name.split(" ", 2) 
       find_or_create_by_first_name_and_last_name(first_name, last_name) 
      end 
     end 
    end 

    person = Account.first.people.find_or_create_by_name("David Heinemeier Hansson") 
    person.first_name # => "David" 
    person.last_name # => "Heinemeier Hansson" 

Таким образом, в принципе вы можете определить метод tagged_with непосредственно в ассоциации!

Этот пример взял из документаций ActiveRecord::Associations

Смежные вопросы