我有一个控制器(与模型无关),它通过 API 在 YouTube 上搜索内容。我要实现的目标很简单......如果有人在没有输入任何字符串的情况下单击搜索按钮,那么会出现一个快速通知,上面写着“请输入搜索字符串”。
“主”视图如下:
<%= form_tag({:controller => 'main', :action => 'index'}, :method => 'get') do %>
<%= label_tag(:text, 'Search:') %>
<%= text_field_tag(:text) %>
<%= submit_tag('Search') %>
<% end %>
<div id="flash">
<% if flash.now[:notice] %>
<p id="notice"><%= flash.now[:notice] %></p>
<% end %>
</div>
我的“主”控制器中的索引操作如下所示:
def index
if params[:text].blank?
flash.now[:notice] = 'Please enter a search string'
render 'index'
else
#do searches on YouTube
end
我也在 stackoverflow 上查看了与此类似的其他问题,并尝试了一些方法,但仍然无法正常工作。我玩过使用 flash[] 与 flash.now[] 的方法,即使我第一次加载页面时,通知消息仍然存在。我可能在这里遗漏了一些非常微不足道的东西,但我花了一段时间才弄清楚但仍然卡住了。无论如何,我们将不胜感激。
更新:好的,我找到了答案。我只是在视图中的表单中添加了以下内容:
<%= hidden_field_tag :searching, true %>
然后我将控制器更改为:
flash.now[:notice] = 'Please enter a search string' if params[:searching]
这工作得很好。这是由此处的答案提供的: 如何阻止在页面加载时显示 Flash 错误消息,直到在 ruby on rails 中单击按钮之后?
跟进问题:在上面的链接中,它提出了一个更清晰的答案,即使用:
params[:search].blank? && !params[:search].nil?
但是,这对我不起作用。我得到错误:
undefined method `gsub' for nil:NilClass
我是 Ruby 的新手,所以这是一个语法错误吗?