javascript - 使用 [action].js.erb 在 Rails 中调用 Flash Notice

标签 javascript ruby-on-rails ruby

我试图通过仅使用 JavaScript 让 Rails Flash 通知出现在我的应用程序中。我有一个表单,它利用 remote: true 在提交时向 Controller 发出 AJAX 请求。表单如下所示:

  # app/views/_email_register.html.erb
  <%= simple_form_for :email, url: emails_path, remote: true do |f| %>
    <div class="modal-body">
      <div class="form-group">
        <%= f.input :address, as: :email, placeholder: 'user@domain.com', label: false %>
      </div>
    </div>
    <div class="modal-footer">
      <%= f.submit 'Subscribe', class: 'btn btn-primary btn-block' %>
    </div>
  <% end %>

rails 应用程序是使用 rails-composer 生成的,它还安装了 bootstrap css。

  # app/controllers/emails_controller.rb
  def create
    @email = Email.new(email_params)
    respond_to do |format|
      if @email.save
        format.html { redirect_to :back, notice: 'Email was successfully registerd' }
        format.js
      else
        format.html { render :new }
        format.js
      end
    end
  end

然后 Controller 调用 create.js.erb 作为 respond_to block 的一部分。

  # app/views/emails/create.js.erb
  // flash to user it was successful
  $(".alert").html("Email was successfully registered");

_messages.html.erb 部分是从 rails-composer 自动生成的。不确定是否可以从 JavaScript 调用此部分

# app/views/layouts/_messages.html.erb
<% flash.each do |name, msg| %>
  <% if msg.is_a?(String) %>
    <div class="alert alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
      <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
      <%= content_tag :div, msg, :id => "flash_#{name}" %>
    </div>
  <% end %>
<% end %>

如能提供有关如何通过 JavaScript 显示 Flash 通知的任何帮助,我们将不胜感激。

最佳答案

您只需要重新渲染在您的 js.erb 中呈现 flash 消息的部分

# app/views/emails/create.js.erb
$('.flash_wrapper').html("<%= escape_javascript(render 'layouts/messages') %>");

在你的 Controller 中设置闪光灯

format.js { flash.now[:notice] = 'Email was successfully registered' }

这会让你看到闪光灯

注意:.flash_wrapper 是您渲染 _message 部分的包装器。

关于javascript - 使用 [action].js.erb 在 Rails 中调用 Flash Notice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38898796/

相关文章:

javascript - 我应该如何使用图像来触发 Javascript?

javascript - 如何使用 BlueImp jquery-file-upload 使用发送选项传递参数

ruby-on-rails - link_to中的“数据类型”参数

ruby - 如何在 InSpec 中访问 Chef data_bags

ruby-on-rails - 在 Rails 应用程序中运行 rake 任务

php - 来自 PHP 的 JSON 对象值

javascript - 有没有办法只在事件发生时运行 p5.js?

ruby-on-rails - Rails - 验证关联的存在?

ruby-on-rails - text_field rails 的自定义标签?

ruby-on-rails - Rails 4 wicked pdf 问题