2012-09-24 80 views
1

我有一個在lightbox中顯示的提交表單。我對錶單進行了相當嚴格的驗證,但在某些情況下,播放列表已經提交,在這種情況下,我無法在提交表單前判斷。如何在不刷新頁面的情況下顯示flash錯誤?

目前我有: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

回答

0

沒有看到您的代碼,我只能提出廣泛的建議。

其中之一就是設置一個控制器動作的js.erb響應 - 或者您可以在HTML中的if子句中創建一個js腳本標記。無論哪種方式,你會使用jQuery來更新元素。

裏面的JS/HTML ERB文件:

​​

中查看Flash區域需要的flash_area(或任何你想將它命名)的ID。

+0

我增加了一些代碼 – Tallboy

1

這是我解決這個問題....我把這些在我所有的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> 

希望這有助於

相關問題