如何在页面加载时停止显示闪存错误消息,直到在轨道上的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)
- 在开发中打印rails flash消息
- 保持DEV隐藏
- 当用户单击搜索按钮时,只需使用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'
,我认为它没用。