Rails - 如何不评估Ransack搜索表单中的字段

Osc*_*car 5 search meta-search ruby-on-rails-3.1

我在Rails 3.1中使用Ransack Gem.一切都按预期工作.但是,我有一个搜索表单,它将使用我遇到问题的Soundex列查找某个人.

在我的表单中,我有一个"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
Run Code Online (Sandbox Code Playgroud)

在我看来:

<%= search_form_for @q do |f| %>
  <label>Given Name:</label>
  <%= f.text_field :given_name_soundex_cont %>

  <%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

gra*_*ywh 0

params[:q][:given_name_soundex]您可以在视图中重复使用来覆盖传递给#ransack/的值#search