2012-02-28 25 views
3

ユーザーは新しいレシピを入力できるRailsビュー(レシピ/新規)があります。そのビューでは、ユーザーは、別のモデル、成分からアイテムを選択することができます。私はユーザーがレシピフォームを離れずに新しい成分を加える方法を望んでいました。Railsモーダルフォーム - フォームの送信が失敗した後、html.erbファイルの内容でポップアップを更新する

JQueryモーダルボックスを読み込む新しい成分のリンクを作成しました。おかげで、コーリー - - 詳細はJquery modal windows and edit objectを参照してください

資産/ JavaScriptの/ recipes.js

coreywardの回答@から、このコード:ここではモーダルを駆動する私のrecipes.jsファイル内のコードです!

$(function(){ 
    var $modal = $('#modal'), 
     $modal_close = $modal.find('.close'), 
     $modal_container = $('#modal-container'); 

    $('a[data-remote]').live('ajax:beforeSend', function(e, xhr, settings){ 
     xhr.setRequestHeader('accept', '*/*;q=0.5, text/html, ' + settings.accepts.html);  
    }); 

    $('a[data-remote]').live('ajax:success', function(xhr, data, status){ 
     $modal 
      .html(data) 
      .prepend($modal_close) 
      .css('top', $(window).scrollTop() + 40) 
      .show(); 
     $modal_container.show(); 
    }); 

    $('.close', '#modal').live('click', function(){ 
     $modal_container.hide(); 
     $modal.hide(); 
     return false; 
    }); 
}); 

レシピ/ new.html.erbマイリンク:

<%= link_to 'New ingredient', new_ingredient_path, :remote => true %> 

これは、それがそこに新しい成分の形でモーダルフォームをロードするという意味で、素晴らしい作品。私は、フォームに必要事項を記入することができ、かつ成分が保存されている場合、私は、モーダル閉じるために私のコントローラから別の関数を呼び出す:

ingredients_controller.rb

def create 
    if @ingredient.save 
    respond_to do |format| 
     format.js { render :js => "close_modal();" } 
    end 
    end 
end 

フォームがないときに私の問題があります正しく記入してください。ユーザーがクリックしてエラーや欠落したフィールドなどがないというフィードバックは得られません...ポップアップボックスに原料フォームをリロードして、部分的に共有エラーを表示します。

成分/新規。 html.erb

<%= form_for @ingredient, :remote => true do |i| %> 
    <%= render 'shared/ingredient_error_messages' %> 

    <div class="field"> 
     <%= i.label :name %> 
     <%= i.text_field :name %> 
    </div> 
    <div class="field"> 
     <%= i.label :srm %> 
     <%= i.text_field :srm %> 
    </div> 
    <div class="field"> 
     <%= i.label :price %> 
     <%= i.text_field :price %> 
    </div> 
    <div class="actions"> 
     <%= i.submit "Save ingredient" %> 
    </div> 
<% end %> 

共有/ _ingredient_error_messages.html.erb

<% if @ingredient.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@ingredient.errors.count, "error") %> 
      prohibited this recipe from being saved:</h2> 
     <p>There were problems with the following fields:</p> 
     <ul> 
      <% @ingredient.errors.full_messages.each do |msg| %> 

       <li><%= msg %></li> 
      <% end %> 
     </ul> 
    </div> 
<% end %> 

は、この作業を取得するための最良の方法は何ですか?私は簡単に別のJS関数を作成し、保存が成功しない場合はコントローラから呼び出すことができますが、ストレートテキスト/ html以外のものを渡す方法は見つかりません。コントローラに、私の「新しい」ビューの内容を解析して関数に出力する方法はありますか?これを行うためのより良い/よりクリーンな方法がありますか?ここで

+1

あなたはこの男がやろうとしているように思っています:http://stackoverflow.com/questions/6374664/rails-and-modal-jquery-dialog-form – PhillipKregg

+0

@PhillipKregg - 私は似たような質問をしていましたが、あまり合わないものがいくつか見つかりました。どういうわけか私はあなたがリンクしたものを見逃しました。私はこのサンプルコードに基づいてこれを理解することができます。何がベストプラクティスですか、この質問を削除しますか? – Jim

+0

必要なら削除することができます。または、それを残すことができ、それは同じ情報を探している人々のための別のリソースを提供します。私はリンクを答えの下に置くことができ、それを解決策としてマークすることができます。それは良いリソースです、そして、それは私に何もしないための無料の偽のポイントを与えるでしょう。ウィンウィン。 :) – PhillipKregg

答えて

関連する問題