Я работаю над гемом Act-as-Taggable-On и у меня есть вопрос о том, как отфильтровать результаты поиска по тегам, выбранным пользователями. Вот сокращенный взгляд на мой контроллер:
class PhotosController < ApplicationController
def index
@photos = Photo.where(["created_at > ? AND is_approved = ?", 1.months.ago, true])
@tags = ["Animals", "Architecture", "Cars", "Flowers", "Food/Drink", "General", "Landscape", "Mountains", "Nature"]
end
def search_by_tag(tag)
@photos = Photo.where('tagged_with LIKE ?', tag)
end
end
Фотографии / индекс
<% @tags.each do |tag| %>
<%= link_to tag, {:search_by_tag => tag}, :class => "tag" %>
<% end %>
Здесь перечислены все теги из хэша @tags
, определенного в index
, но щелчок по ним на самом деле ничего не фильтрует. Вот посмотрите, что происходит при нажатии одной из этих ссылок в журнале:
Started GET "/photos?search_by_tag=Animals" for 127.0.0.1 at Sun Oct 09 17:11:09 -0400 2011
Processing by PhotosController#index as HTML
Parameters: {"search_by_tag"=>"Animals"}
SQL (0.5ms) SELECT name FROM sqlite_master WHERE type = 'table' AND NOT name = 'sqlite_sequence'
В результате я хочу, чтобы на странице отображались только фотографии с tagged_with
, какой бы тег не был нажат. Я не могу понять, как этого добиться.
(Дополнительный вопрос: я не могу найти способ перечислить все теги из таблицы tags
, которые сгенерированы как теги. При выполнении чего-то вроде Photo.tagged_with
или Photo.tags
не работает. Я могу видеть таблицу «тегов» созданного драгоценного камня и записи внутри него; я просто не совсем понимаю, как с этим обращаться, используя этот драгоценный камень)
Любые мысли с благодарностью.
UPDATE
Я обновил свой код и стал немного ближе.
class PhotosController < ApplicationController
def search_by_tag
@photos = Photo.tagged_with(params[:tag_name])
end
фото / индекс
<% Photo.tag_counts_on(:tags).map(&:name).each do |tag| %>
<%= link_to tag, {:action => 'search_by_tag', :tag_name => tag}, :class => "tag" %>
<% end %>
Я считаю, что это ближе, но все еще работает через это ...