【问题标题】:GEM Ransack - using ransack to search through a link - Rails 4GEM Ransack - 使用 ransack 搜索链接 - Rails 4
【发布时间】:2015-10-08 11:51:19
【问题描述】:

我是 Rails 新手,非常感谢您的帮助和建议。

  • 我目前正在使用 gem ransack
  • 在我的架构中,我有一个名为adverts 的表,其中包含titlecontent
  • 我正在尝试通过链接创建带有 ransack 的搜索
  • 我有一个名为“相似工作”的链接 [<%= link_to 'similar jobs', search_adverts_path(q: {advert_title_eq: @advert.title}), class: "fa fa-plus-square" %>]
  • 当前在我的应用程序中,当用户单击 similar jobs 以获取标题为 risk analyst 的广告时,它会显示具有确切广告标题“风险分析师”的搜索结果,但我希望显示包含“ risk' & 'analyst' - 例如,'business Analyst' 'risk Analyst' 'financial Analyst' 等应显示在搜索结果列表中,但仅显示 'risk Analyst'

我想做的是:

  • 当用户查看广告(例如:风险分析师)并点击链接“类似职位”时,搜索应显示标题包含“风险”和“分析师”的广告

adverts_controller.rb

在我的广告控制器中,我有以下操作:

  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

视图/广告/show.html.erb

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    一个github repoRansack link search有类似问题的解决方案。

    在哪里,链接如下:

    &lt;%= link_to 'similar jobs', search_adverts_path(q: {title_cont_any: @advert.title.split(' ')}) %&gt;

    搜索动作如下:

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

    但是,如果您想以自己的方式解决,只需将搜索操作 if 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

    【讨论】:

    • IMO 这个答案没有给我添加任何东西。我在2小时前回答。除了它有一个根据我的建议制作的脚手架。
    【解决方案2】:

    可以在链接级别完成:

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

    我在ransack wiki 找到。我确实在 Rails 控制台上测试过。

    另外,您需要删除:

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

    在你的控制器上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2014-10-14
      • 2021-12-29
      相关资源
      最近更新 更多