保存 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" %>
希望这对您有所帮助 - 如果您有任何问题,请告诉我。
我想在结果页面中显示用户输入的搜索词作为标记的一部分。
我希望简单的 <%= 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" %>
希望这对您有所帮助 - 如果您有任何问题,请告诉我。