【问题标题】:ruby on rails flash notice always appearsruby on rails flash 通知总是出现
【发布时间】:2013-06-10 12:08:40
【问题描述】:

我有一个控制器(与模型无关),它通过 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]

这很好用。这是由这里的答案提供的: How do I stop a flash error message from showing on page load until after button is clicked in ruby on rails?

后续问题:在上面的链接中,它提出了一个更简洁的答案:

    params[:search].blank? && !params[:search].nil?

但是,这对我不起作用。我得到了错误:

    undefined method `gsub' for nil:NilClass

我是 Ruby 新手,这是语法错误吗?

【问题讨论】:

  • 第一件事,你为什么要显式调用render 'index'?你的问题到底是什么?即使您在params[:text] 不为空的情况下调用操作,您是否会收到通知?
  • 初次加载页面时,会有params[:text]吗?
  • 嗨 Marek,我尝试了 redirect_to,但它卡在了一个循环中。你有什么理由问我为什么使用渲染“索引”?问题是闪存通知是永久存在的。即使 params[:text] 不为空,我也会收到 Flash 通知。抱歉,我对这一切还是很陌生...
  • 嗨 Vimsha,当我第一次加载页面时,搜索框中不会有默认值,因此它将是空白的。我之前考虑过,但我认为该方法只会在我点击搜索按钮后检查 param[:text] 是否为空白?

标签: ruby-on-rails flash messages notice


【解决方案1】:

这可能会有所帮助,值得一试。在我的情况下,我的 Flash 消息没有显示,因为我正在使用

flash.now[:notice]

什么时候改成

flash[:notice]

开始展示了。

完整代码,控制器:

  def create
    user_data = user_params
    user_data[:password] = SecureRandom.uuid
    @user = User.new(user_data)
    @user.save
    flash[:notice] = 'An email was sent for the user to confirm their account.'
    respond_with(@user)
  end

aaplication.html.erb

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title><%= full_title(yield(:title)) %></title>
  <%= csrf_meta_tags %>
  <%= csp_meta_tag %>

  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  <%= render 'layouts/shim' %>
</head>

<body>
<%= render 'layouts/header' %>
<div class="container">
  <% flash.each do |message_type, message| %>
    <div id=<%= message_type %> class="alert"><%= message %></div>
  <% end %>
  <%= yield %>
  <%= render 'layouts/footer' %>
</div>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2011-07-08
    相关资源
    最近更新 更多