使用内部联接表进行高级搜索

c2e8gylq  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(315)

我有个问题。我有两张有nn关系的table。它们在底座上有很好的连接(由控制台通过tips.find(1.categories)进行验证)。这两张table是小费和分类。我的目标是创建一个搜索表单,允许您选择一个类别,并显示与该类别相关的所有提示。我发现了一个方法可以做到这一点,它适用于基本链接(i。e。例如,如果tip表中有一个category\u id,这里不是这样)。因此,我必须找到一种方法来编写以下搜索条件:
提示.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/U控制器:

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

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%')

我希望我已经说清楚了,我提前谢谢你!:)

bvuwiixz

bvuwiixz1#

如果我读的是正确的,你正在寻找一个类别,这样你就可以显示与该类别有关的所有提示。你为什么不在你的控制器里做呢。 @tip = Category.where("name LIKE ?", "#{params[:search]}%").includes(:tips).map(&:tips).uniq name将是您正在搜索的类别中的数据库字段。

相关问题