保存 Ransack 搜索参数

Save Ransack search param

我想在结果页面中显示用户输入的搜索词作为标记的一部分。

我希望简单的 <%= params[:q] %> 可以解决问题,但是 returns 谓词也是如此,例如。 {"title_or_content_cont"=>"foo"}

如何只提取 "foo"?

params 是 class ActionController::Parameters 的实例。这意味着您可以像访问 ruby 哈希一样从中访问数据。

<%= params[:q][:title_or_content_cont] %> #returns the value foo

# You can also use keys wrapped with quotes

<%= params[:q]["title_or_content_cont"] %> #returns the value foo

因此,如果您有嵌套哈希,您可以继续以类似方式查找键。

Kumar 的回答很好,尽管我会采用稍微不同的方法来涵盖 params[:q]nil 的场合。

如果它为 nil,以下将导致错误:

<%= params[:q][:title_or_content_cont] %>

NoMethodError: undefined method `[]' for nil:NilClass

因此,要安全地处理此问题,您应该使用以下方法之一(参考 :dig and :try):

<%= params.dig(:q, :title_or_content_cont) %> # on newer versions of Rails
<%= params[:q].try(:[], :title_or_content_cont) %> # on older versions

这很重要 - 如果您不考虑这一点,只要缺少搜索词,您就会收到错误消息。

以上两个 return 如果没有找到,则为零,所以你可以让它不显示任何内容,或者如果没有找到则添加替代副本,即

<%= params.dig(:q, :title_or_content_cont) || "No search term" %>

希望这对您有所帮助 - 如果您有任何问题,请告诉我。