我有一个问题。我有两个具有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
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%')
我希望我已经清楚了,在此先感谢您! :)
答案 0 :(得分:0)
如果我没看错的话,您正在寻找一个类别,以便可以显示与该类别有关的所有提示。您为什么不只在您的控制器中执行此操作。
@tip = Category.where("name LIKE ?", "#{params[:search]}%").includes(:tips).map(&:tips).uniq
名称将是您正在搜索的类别中的数据库字段。