【发布时间】:2023-04-02 17:08:02
【问题描述】:
我在 Rails 3.1 中使用 Ransack Gem。一切都按预期工作。但是,我有一个搜索表单,可以使用 a Soundex column 查找我遇到问题的人。
在我的表单中,我有一个“given_name_soundex_cont”字段,用户将输入名称“Joe”。我的控制器将“joe”转换为 soundex 代码,然后 Ransack 在“given_name_soundex”列中查找匹配项。
所有匹配的记录都返回并且看起来很好,除了用户输入单词“joe”的字段现在显示 soundex 值(当然因为我更改了参数)。
所以我想我可以添加一个“given_name_cont”字段并隐藏“given_name_soundex_cont”字段,但现在 Ransack 想要在查询中包含“given_name_cont”,这是我不想要的。
有谁知道我如何在 Ransack 搜索表单中包含字段而不用 Ransack 实际评估它们。这样我就可以指定哪些字段不被评估,哪些不被评估。
如果有帮助,这就是我的控制器中的内容:
def index
if !params[:q].blank? # nil.blank? and [].blank? are true
search_params = params[:q]
search_params[:given_name_soundex_cont] = convert_to_soundex(search_params[:given_name_soundex_cont])
@q = Person.search(search_params)
@results = @q.result.limit(50)
else
@q = Person.search(params[:q])
@results = []
end
end
private
def convert_to_soundex(text)
Text::Soundex.soundex(text.to_s)
end
在我看来:
<%= search_form_for @q do |f| %>
<label>Given Name:</label>
<%= f.text_field :given_name_soundex_cont %>
<%= f.submit %>
<% end %>
【问题讨论】:
标签: search ruby-on-rails-3.1 meta-search