ruby-on-rails 搜索,无法搜索两个属性

piah890a  于 2023-04-08  发布在  Ruby
关注(0)|答案(1)|浏览(170)

我是一个初学者试图使一个搜索栏,我与一个简单的属性研究,工作正常,但当我试图添加另一个属性在搜索字段,我有一个错误:“Ransack needs Product associations explicitly allowlisted as searchable. Define a ransackable_associations class method in your Product“,但它就在这里!!
在我的控制器下

class SearchController < ApplicationController
      def index
        @q = Product.ransack(params[:q])
        @products2 = @q.result(distinct: true)
      end
    end

这个模型

class Product < ApplicationRecord
      belongs_to :category
      has_many :product_carts
      has_many :carts, through: :product_carts

      def self.ransackable_attributes(auth_object = nil)
        ["description", "price", "title"]
      end
      end

这里有两个经过测试的观点
测试的视图,这两个可以使用单个术语描述搜索

<%= search_form_for(@q, url: search_path, method: :get, class:"d- 
   flex") do |f| %>
      <%= f.search_field :title_cont, placeholder: "recherchez dans la 
    description", class: "form-control me-2" %>
      <%= f.submit "Ok !" %>
    <% end %>
<%= search_form_for(@q, url: search_path, method: :get, class:"d- 
   flex") do |f| %>
      <%= f.search_field :description_cont, placeholder: "recherchez dans la 
    description", class: "form-control me-2" %>
      <%= f.submit "Ok !" %>
    <% end %>

但是这个方法行不通,title和description在同一个sqlpostgre产品表中,只有两列,title是字符串,description是文本:我已经回顾了很多stackoverflow的主题,但我找不到任何明确的方式来解决这个问题!

<%= search_form_for(@q, url: search_path, method: :get, class:"d- 
   flex") do |f| %>
      <%= f.search_field :description_or_title_cont, placeholder: "recherchez dans la 
    description", class: "form-control me-2" %>
      <%= f.submit "Ok !" %>
    <% end %>

rails error
我尝试了其他搜索与tchat gpt谁告诉我尝试这在模型中,但仍然是同样的错误
tchat gpt
提前感谢您的帮助!

new9mtju

new9mtju1#

Hello @samuel bellotlecoq,很抱歉,但是我找不到你的方法ransackable_associations。我遇到了同样的问题,并且我只是想通过模型中的字段进行搜索(你的例子是Product),我在我的模型中定义了以下方法:

class << self
  def ransackable_attributes(auth_object = nil)
    [ "id","name" ]
  end

  def ransackable_associations(auth_object = nil)
   []
  end

结束
如果查看此处的代码库,您可以确定需要定义该方法。
希望我的回答能对你有所帮助。

相关问题