1

ライトボックスに表示される送信フォームがあります。私はフォームをかなり厳密に検証しますが、プレイリストがすでに送信されている状況があります。その場合、フォームが送信される前にわかりません。

現在私は持っています:disable_with => 'Submitting...'

エラーがフォームに返送され、送信ボタンが再度有効になると、完全にすばらしいでしょう。

これはあまり複雑にすることなく可能でしょうか?

また、2つ目の関連する質問があります...私のフォームはライトボックスにあるため、コードは実際にはインデックスページにあります(私のアプリはほとんど1ページです)。これは、実際には「新しい」アクションがないことを意味しますが@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

4

2 に答える 2

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>

お役に立てれば

于 2012-09-29T09:03:57.490 に答える
0

あなたのコードを見なければ、幅広い提案しかできません。

1 つは、コントローラー アクションへの js.erb 応答を設定することです。または、HTML 内の if 句で js スクリプト タグを実行することもできます。いずれにしても、jQuery を使用して要素を更新します。

js/html erb ファイル内:

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

ビューのフラッシュ領域には、ID flash_area(または名前を付けたいもの) が必要です。

于 2012-09-24T03:37:34.430 に答える