【问题标题】:Keyword searching defaulting to AND关键字搜索默认为 AND
【发布时间】:2009-09-17 04:57:06
【问题描述】:

我成功安装并设置了 searchlogic 以进行基本(关键字)搜索。我有以下问题:

@search = Proposal.search(params[:search])
@proposals = @search.all

如果我输入诸如“red”之类的关键字,上面的代码可以正常工作。它会用红色关键字显示所有内容。或者,如果我输入“green”,它会显示所有以绿色为关键字的内容。但是,当我在搜索框中键入“red green”时,它只会显示关键字既是红色又是绿色的情况(而不会显示它们可能只有两个关键字之一的情况)。是的,我正在使用keywords_like_any。我可以通过调试看到一般问题是什么,keywords_like_any: green red。下面的代码按我的意愿工作(显示红色或绿色的任何实例)。

@search2 = Proposal.keywords_like_any("red", "green")
@test = @search2.all

我相信解决这个问题我需要做的是将第一个代码转为将 params[:search] 视为数组?我尝试做 params[:string].to_s.split (如 railscast 所示)但它不起作用。

【问题讨论】:

  • params[:search]是什么类?
  • 不确定我是否理解您的问题。虽然当我调试参数时我得到这个: --- !map:HashWithIndifferentAccess commit: Submitauthentity_token: yfYORg04RDMlEgjr/4004PRTaJ2TJbV0z6Feq+OYXgw= action: index controller: users search: !map:HashWithIndifferentAccess keywords_like_any: asdf category_id_equals: "" 另外,代码原帖中提到的是在我的用户控制器中。如果有帮助,我可以粘贴我的代码,但它非常标准。谢谢

标签: ruby-on-rails ruby rubygems


【解决方案1】:

*_like_any 旨在与复选框表单助手 (f.check_box) 一起使用,它将数组输出到您的 params 哈希中,而不是输出字符串的 f.text_field。如果您仍想将它们与f.text_field 一起使用,您可以:

  • 在客户端使用 Javascript 拆分字段以输出数组
  • 在你的控制器中拆分它

考虑到您的字段被命名为键盘,这里有一些代码可以解决您的问题:

params[:search][:keywords_like_any] = params[:search][:keywords_like_any].split(' ')
@proposals = Proposal.search(params[:search])

您可以跳过@proposals = @search.all 这一行,因为搜索结果就像一个数组。

【讨论】:

  • 这解决了我的主要问题,非常感谢!虽然它给我留下了一个小怪癖。现在,当我搜索时,刷新页面后,我的搜索框充满了“redgreen”而不是“red green”。奇怪吗?
  • 因为你使用了form_for, it fills the text_fieldwith the value you previously inputted ( which ended in your search object ). But this value is an array, so when converted in a string. ['red', 'green']=> "redgreen"。 @proposals.keywords_like_any = @proposals.keywords_like_any.join(" ") 为了保持代码的可读性,我将 @proposals 变量重命名为 @search,如果不是这样,它就没有任何意义。 (因此以 @proposals = @search.all 完成)。
【解决方案2】:

你说你试过params[:string].to_s.split - 我不知道这是不是错字,但应该是params[:search].to_s.split

【讨论】:

    【解决方案3】:

    我可能不明白您的问题,但在我看来,您正试图在属于视图的控制器中实现某些东西。如果你的观点是这样的:

    - form_for @search do |f|
      = f.text_field :color_like_any
    

    那么您的初始控制器示例将起作用。

    【讨论】:

    • 我的视图确实有该代码......并且它确实“工作”,如上所述。然而,只是不像我预期/想要的那样。
    猜你喜欢
    • 2011-09-21
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多