2017-06-12 56 views
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 

回答

0

您正在试图调用ransack上ActiveRecord的集合,它应该在Model类中调用。

def landing 
    @q = Product.ransack(search_params[:title_count]) 
    @products = @q.result(distinct: true).order('id ASC').page(params[:page]).per(10) 
end 

参考Usage

+0

谢谢您的建议。然而,我仍然无法完全理解你所说的话(对不起,我是红宝石的初学者)......我认识到搜索作为“搜索”。 由于使用(https://github.com/activerecord-hackery/ransack#usage)表示 “Ransack会尝试在您的模型中使类方法#search可用,但是如果已经在其他地方定义了#search,您可以随时使用默认的#ransack类方法,因此以下内容是等效的: “ ”它们明确使用“ransack”在控制器中。你能详细说明一下吗?谢谢。 –

+0

正如陈述的那样,'Ransack会试着让你的模型中可用的类方法#search',它在class上运行,'Product'是你的情况下的model类。此前,您尝试在“ActiveRecord集合”上调用此方法,该集合不是类,而是“ActiveRecord”类的实例对象 –

相关问题