如何在没有刷新页面显示闪存错误?(How to display flash error withou

2019-10-17 06:35发布

我有一个在灯箱所示的提交表单。 我验证表单很严重,但有些情况下播放列表已经提交的情况下,在这种情况下,提交表单之前我不能告诉。

目前,我有:disable_with => 'Submitting...'

如果错误被送回形式这将是完全真棒,并提交按钮将重新启用。

这将是可能没有太多的并发症?

我也有第二个相关的问题......因为我的形式是在灯箱广告,它的代码实际上是对索引页(我的应用程序只是一个页面差不多)。 这意味着,真的是没有“新”的行动,而是一个@playlist = Playlist.new(:title => ...)在我的索引行动(与沿@playlists = Playlist.all等)。 在我的路线我这样做: resources :playlists, :only => [:create]

这是否健全有关的权利我做的方式?

编辑:下面是一些代码,但它基本上是一样简单,你可以想像它。

下面的那种作品......它创造如果有效播放列表,否则什么也不做。 这两次create.js.erb被称为..我刚才不如何使这项工作完成了。 如果成功,我需要关闭该窗口,如果失败,我需要的错误装入的形式这就是已经在屏幕上。 林不知道那个地方去,但:/

  before_filter :load_genres, :only =>[:index, :user]
  before_filter :new_playlist, :only => [:index, :new]

  def index
    @playlists = Playlist.order('created_at DESC').page(params[:page]).per(30)
  end

  def create
    @playlist = Playlist.new(params[:playlist])
    respond_to do |format|
      if @playlist.save
        format.html { redirect_to root_path, :notice => "Playlist submitted" }
        format.js   {}
      else
        format.html { render :action => :new, :layout => !request.xhr? }
        format.js {}
      end
    end
  end

  def new

  end

  def load_genres
    @genres = Genre.order(:name)
  end

  def new_playlist
    @playlist = Playlist.new(:title => params[:title], :url => params[:url], :description => params[:description])
  end

继承人的第一像我的形式(位于index.html.erb)的:

<%= form_for @playlist, :remote => true do |f| %>

我目前在没有HTML或代码create.html.erb

Answer 1:

没有看到你的代码,我只能让广泛的建议。

其中之一是建立到控制器action--一个js.erb响应或者你可以在HTML中的if从句中做一个js脚本标签。 无论哪种方式,你可以使用jQuery更新元素。

里面的JS / HTML ERB文件:

jQuery('#flash_area).html(<flash message>);

视图中的闪存区域需要的ID flash_area (或者你想命名为任何)。



Answer 2:

下面是我解决这个问题....我把这些在我所有的js.erb文件

$('#flash').html("<%= escape_javascript raw(flash_display) %>");

有了这个助手

def flash_display
  response = ""
  flash.each do |name, msg|
    response = response + content_tag(:div, msg, :id => "flash_#{name}")
  end
  flash.discard
  response
end

这个工程很好地已在布局设置闪光灯的div

<div id="flash">
  <% flash.each do |name, msg| %>
    <%= content_tag :div, msg, :id => "flash_#{name}" %>
  <% end %>
</div>

希望这可以帮助



文章来源: How to display flash error without refreshing page?