没有刷新页面如何显示闪存错误?

我有一个提交表单,显示在灯箱中。 我非常认真地validation了表单,但是有些情况下已经提交了播放列表,在这种情况下,在提交表单之前我无法分辨。

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

如果错误被发送回表单,并且提交按钮将重新启用,那将是非常棒的。

这可能没有太多的复杂性吗?

我还有第二个相关的问题…因为我的表单在灯箱中,它的代码实际上是在索引页面上(我的应用程序只是一页)。 这意味着我的索引操作中没有’new’动作,而是@playlist = Playlist.new(:title => ...) (以及@playlists = Playlist.all等)。 在我的路线中,我这样做: resources :playlists, :only => [:create]

这听起来跟我做的一样吗?

编辑:HEre是一些代码,虽然它基本上就像你想象的那么简单。

以下类型的作品……如果有效,则创建播放列表,否则无效。 两次调用create.js.erb ..我现在不知道如何使这项工作完成。 在成功我需要关闭窗口,失败时我需要将错误加载到已经在屏幕上的forms。 我不知道那是怎么回事:/

  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):

true do |f| %>

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

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

一种方法是设置对控制器动作的js.erb响应 – 或者你可以在HTML中的if子句中执行js脚本标记。 无论哪种方式,您都可以使用jQuery来更新元素。

在js / html erb文件中:

 jQuery('#flash_area).html(); 

视图中的flash区域需要一个flash_area的id(或者你想要命名的任何名称)。

这是我对这个问题的解决方案….我把这些放在我所有的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 

这适用于已经在布局中设置的flash div

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

希望这可以帮助