简体   繁体   English

GEM Ransack - 使用ransack搜索链接 - Rails 4

[英]GEM Ransack - using ransack to search through a link - Rails 4

i'm new to rails so your help and advise would be much appreciated. 我是铁杆的新手,所以非常感谢你的帮助和建议。

  • i am currently using the gem ransack 我目前使用的宝石ransack
  • in my schema i have a table called adverts with the columns title & content 在我的架构中,我有一个名为adverts的表,其中包含列titlecontent
  • i am trying to create a search with ransack through a link 我试图通过链接创建一个搜索hansack
  • i have a link called similar jobs [ <%= link_to 'similar jobs', search_adverts_path(q: {advert_title_eq: @advert.title}), class: "fa fa-plus-square" %> ] 我有一个名为类似职位的链接[ <%= link_to 'similar jobs', search_adverts_path(q: {advert_title_eq: @advert.title}), class: "fa fa-plus-square" %> ]
  • currently in my app when a user clicks on similar jobs for an advert with the title risk analyst , it displays search results with the exact advert title 'risk analyst' but what i would like is to display search results containing 'risk' & 'analyst' - so example, 'business analyst' 'risk analyst' 'financial analyst' etc should be displayed in the search result list, but only 'risk analyst' is being displayed 目前在我的应用程序中,当用户点击具有标题risk analyst的广告的similar jobs ,它会显示具有确切广告标题“风险分析师”的搜索结果,但我希望显示包含“风险”和“分析师”的搜索结果' - 例如,'业务分析师''风险分析师''金融分析师'等应该显示在搜索结果列表中,但只显示'风险分析师'

what i want to do is: 我想做的是:

  • when a user views an advert eg: risk analyst and clicks on the link 'similar jobs' the search should display adverts with titles containing 'risk' & 'analyst' 当用户查看广告时,例如:风险分析师并点击链接“类似工作”,搜索应显示包含“风险”和“分析师”标题的广告

adverts_controller.rb adverts_controller.rb

in my adverts controller i have the below action: 在我的广告控制器中,我有以下行动:

  def search
    @userj = current_userj
    if params[:q].present? and params[:q][:advert_title_eq].present?
     params[:q][:title_cont] = params[:q][:advert_title_eq]
    end 
    @search = Advert.search(params[:q])
    @adverts = @search.result(distinct: true)
    @active_adverts = @adverts.where(['appdeadline >= ?', Time.zone.today]) #displays adverts with deadline > or = to current date
    @active_adverts_count = @active_adverts.count
  end

views / adverts / show.html.erb views / adverts / show.html.erb

<%= link_to 'similar jobs', search_adverts_path(q: {advert_title_eq: @advert.title}), class: "fa fa-plus-square" %>

A github repo Ransack link search have the solution of similar problem. github repo Ransack链接搜索有类似问题的解决方案。

where, the link is as: 其中,链接如下:

<%= link_to 'similar jobs', search_adverts_path(q: {title_cont_any: @advert.title.split(' ')}) %>

and the search action is as: 搜索操作如下:

def search @search = Advert.search(params[:q]) @adverts = @search.result(distinct: true) end

But, if you want to solve in your way, just refactor the search action if condition block only as 但是,如果你想以你的方式解决,只需重构搜索操作, if condition blockif condition block

if params[:q].present? and params[:q][:advert_title_eq].present? params[:q][:title_cont_any] = params[:q][:advert_title_eq].split(' ') end

It can be done at link level: 它可以在链接级别完成:

<%= link_to 'similar jobs', search_adverts_path(q: {advert_title_cont_any: @advert.title.split}), class: "fa fa-plus-square" %>

I found at ransack wiki . 我在ransack wiki找到了。 I did test it at rails console. 我在rails console上测试过它。

Also, you'll need to remove: 此外,您还需要删除:

if params[:q].present? and params[:q][:advert_title_eq].present?
  params[:q][:title_cont] = params[:q][:advert_title_eq]
end

At your controller. 在你的控制器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM