如何在页面加载时停止显示闪存错误消息,直到在轨道上的ruby中单击按钮后?

我正在试图找出一种方法来阻止此Flash消息在页面加载时显示:

class SearchesController < ApplicationController def index @users = User.search params[:search] @default_image = "/assets/default_avatar.jpg" if @users.empty? || params[:search].blank? flash[:error] = "Sorry no user(s) found!" if @users.empty? flash[:error] = "Please give us something to search for!" if params[:search].blank? render 'index' end end end 

我明白为什么它显示(显然当访问页面时,搜索参数已经是空白)。 在ruby轨道上必须有一些技巧,我可以在这个flash消息上使用它来阻止它点击,直到点击搜索按钮,例如

 flash[:error] = "Please give us something to search for!" if params[:search].blank? after_get 

不记得是after_get弥补了。

我相信有人在那里有答案。

我在rails api中看到了after_commit,但没有在我的情况下如何使用它的例子,或者即使它是我需要的。

亲切的胡子

一个简单的解决方案是在搜索表单中添加一个隐藏字段,并检查该值是否存在而不是实际的搜索字符串。

视图

 <%= hidden_field_tag :searching, true %> 

调节器

 flash[:error] = "Please give us something to search for!" if params[:searching] 

我可以想到基于java脚本的解决方案,(但不是rails)

  1. 在开发中打印rails flash消息
  2. 保持DEV隐藏
  3. 当用户单击搜索按钮时,只需使用java脚本即可显示DIV

我认为这符合您的要求,就我而言,rails并不能满足您的需求

HTH

如果我理解正确,您可以使用GET请求(在这种情况下,您不需要Flash消息)或POST表单中填写:search字段来访问操作’index’。

您可以使用request.post?检查您是否处于POST请求中request.post? (也存在request.get? , request.put?等…)

 class SearchesController < ApplicationController def index @default_image = "/assets/default_avatar.jpg" if request.post? @users = User.search params[:search] if @users.empty? || params[:search].blank? flash[:error] = "Sorry no user(s) found!" if @users.empty? flash[:error] = "Please give us something to search for!" if params[:search].blank? end end end end 

我删除了render 'index' ,我认为它没用。