Сделайте расширенный поиск с помощью внутренних таблиц соединения

0

У меня вопрос. У меня две таблицы с отношением NN. Они отлично связаны в базе (проверяется консолью с помощью категорий Tips.find(1).categories). Две таблицы: Совет и Категория. Моя цель - создать форму поиска, которая позволяет вам выбрать категорию и отобразить все подсказки, относящиеся к этой категории. Я нашел метод, который делает это, он работает для базовых ссылок (например, если, например, в таблице Tip была категория category_id, что здесь не так). Поэтому я должен найти способ написать следующее условие поиска:

Tip.rb

class Tip < ApplicationRecord

has_many :category_to_tips
  has_many :categories, through: :category_to_tips

  has_many :comments

  belongs_to :creator, class_name: "User"

  has_many :likes, dependent: :destroy

  def self.search(params)
      tips = Tip.where("(tips) LIKE ?", "%#{params[:search]}%") if params[:search].present?
      tips
  end
end

Tip_controller:

def index
   @tip = Tip.all
   @tip = Tip.joins(:categories).search(params[:search])
 end

form в index.html.erb:

    <%= form_tag tips_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
    <% end %>

И когда я запускаю свою форму, у меня есть эта ошибка:

PG::SyntaxError: ERREUR:  erreur de syntaxe sur ou près de « . »
LINE 1: ...ry_to_tips"."category_id" WHERE ((Category.find(2).tips) LIK...
                                                             ^
: SELECT "tips".* FROM "tips" INNER JOIN "category_to_tips" ON "category_to_tips"."tip_id" = "tips"."id" INNER JOIN "categories" ON "categories"."id" = "category_to_tips"."category_id" WHERE ((Category.find(2).tips) LIKE '%2%')

Надеюсь, я был ясен, и я благодарю вас заранее! :)

Теги:
inner-join

2 ответа

0

Большое спасибо.

Поэтому я заменяю:

def index
    @tip = Tip.all
    @tip = Tip.joins(:categories).search(parameters[:search])

  end 

через

@tip = Category.where("title LIKE?", "#{params[:search]}%").map(&:tips).uniq

У меня нет названия столбца в моей категории db. Или, если я правильно понял, вы хотите найти заголовок для категории, где заголовок находится в таблице рекомендаций? У меня есть эта ошибка: нет названий столбцов в категориях db.

0

Если я правильно ее читаю, вы ищете категорию, чтобы вы могли отображать все советы, относящиеся к этой категории. Почему бы вам просто не сделать это в контроллере youre.

@tip = Category.where("name LIKE?", "#{params[:search]}%").includes(:tips).map(&:tips).uniq

имя будет поле базы данных из категории, которую вы ищете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню