Rails 3: виртуальный атрибут Railscast #167 для создания тегов — @user.tags

Я хотел бы иметь систему тегов, в которой я могу разделять теги по пользователям, которые их создали. Я следил за Railscast #167 о настройке тегов с использованием виртуальных атрибутов, но таким образом я могу только вызвать @post.tags, чтобы найти теги для сообщения, но я не могу вызвать @user.tags и найти все их теги.

Как я могу дополнить это, чтобы @user.posts.tag("music") возвращал все свои сообщения с тегом music?

Спасибо за помощь или понимание того, что я делаю неправильно.


person trying_hal9000    schedule 24.06.2011    source источник


Ответы (1)


@user.posts возвращает массив, так что вы можете довольно легко отфильтровать его примерно так:

@user.posts.select do |post|
  post.tag_names.include? "music"
end

Однако вы можете столкнуться с проблемой, когда в этой ситуации записи загружаются неохотно. Что-то вроде этого должно позаботиться об этом:

Post.includes(:taggings => :tags).where("posts.user_id = ?", @user.id).select do |post|
  post.tag_names.include? "music"
end
person Luke    schedule 24.06.2011