0
现在我正在进行职位评估网站。我想在我的着陆页上创建搜索功能。所以我安装了gemfile“ransack”。但是,当我在我的控制器上放置“ransack”时,在本地环境中出现错误“undefined method`ransack for#”。未定义的方法`ransack'为#<Product :: ActiveRecord_Relation ...>
尽管我重新启动了本地服务器,并且命令“gem list ransack”显示ransack已成功安装,但我无法进行搜索....问题的原因可能是什么?谢谢阅读。
我的控制器是这样
Product_controller.rb
class ProductsController < RankingController
layout "review_site", :except => :show
# before_action :authenticate_user!, only: :show
def index
@products = Product.order('id ASC').per_page_kaminari(params[:page]).per(10)
end
def show
@product = Product.find(params[:id])
end
def search
@products = Product.where('title LIKE(?)', "%#{params[:keyword]}%").per_page_kaminari(params[:page]).per(10)
end
def landing
@q = Product.order('id ASC').per_page_kaminari(params[:page]).per(10).ransack(search_params)
@products = @q.result(distinct: true)
end
end
private
def search_params
params.permit(:title_count)
end
谢谢您的建议。然而,我仍然无法完全理解你所说的话(对不起,我是红宝石的初学者)......我认识到搜索作为“搜索”。 由于使用(https://github.com/activerecord-hackery/ransack#usage)表示 “Ransack会尝试在您的模型中使类方法#search可用,但是如果已经在其他地方定义了#search,您可以随时使用默认的#ransack类方法,因此以下内容是等效的: “ ”它们明确使用“ransack”在控制器中。你能详细说明一下吗?谢谢。 –
正如陈述的那样,'Ransack会试着让你的模型中可用的类方法#search',它在class上运行,'Product'是你的情况下的model类。此前,您尝试在“ActiveRecord集合”上调用此方法,该集合不是类,而是“ActiveRecord”类的实例对象 –