On Rails 4. Я делаю сайт с продуктами. Эти продукты могут иметь множество тегов. Модели:Ruby on Rails - link_to с тегом filter
class Product < ActiveRecord::Base
has_many :tags, through: :product_tags
class Tag < ActiveRecord::Base
has_many :products, through: :product_tags
Я пытаюсь сделать заявку по всей Navbar, где пользователь может нажать каждую навигационную ссылку, чтобы принять его/ее к индексу продукции, а продукты будут фильтроваться по имени тега из ссылка. До сих пор я на самом деле это работает:
application.html.erb
<li><%= link_to "Pencils", products_path(tag: "Pencils") %></li>
products_controller.rb
def index
if params[:tag]
@products = Product.joins(:tags).order('id').page(params[:page]).per(20).where(tags: { name: params[:tag] })
else
@products = @q.result(distinct: true).order('id').page(params[:page]).per(20)
end
end
(«еще» часть использует Ransack, есть также форма внутри заголовка для ввода условий поиска, если вы не хотите использовать навигационные ссылки).
Моя проблема возникает, когда Я хочу вернуть продукты, которые имеют TWO теги, для которых я хочу фильтровать. Например, допустим, у меня есть теги «Синий» и «Карандаши», и я хотел создать ссылку, которая найдет все продукты Blue Pencil. Я пробовал несколько вещей, в том числе экспериментировал с .split(), но не смог получить нужный мне результат. Не хотите использовать драгоценный камень здесь, если есть другой способ. Спасибо за любую помощь!
Это хорошая мысль, не так подумайте о двух разных местах. Однако это не работает, оно ничего не возвращает, когда я пытаюсь (без ошибок, просто нет каких-либо продуктов) ... не знаю, почему ... будет продолжать пробовать несколько вещей. – Rachel9494
Да, правильно, я думаю, что это не сработает ... вы можете попробовать с 'includes' вместо' joins'? ... Я утончаю объединение делает ленивую загрузку только соответствующей записи тега, но включает в себя все записи тегов. Или я могу просто поговорить через мою шляпу ... – SteveTurczyn
Спасибо, что продолжали мне помогать! Попытка «включает» тоже не работала ... должно быть, еще не хватает части головоломки. – Rachel9494