2011-02-03 11 views
0

私の最初のAJAX + Rails 3マイクロアプリに問題があります。私はjQueryを使って完全に無知だので、私はここで Rails 3 AJAX(JQuery)のポストが成功した保存に正しく応答するようにするにはどうすればよいですか?

はコントローラここ

def create 
    @prospect = Prospect.new(params[:prospect]) 
    if @prospect.save 
    logger.info "seems to save" 
    else 
    logger.info "does not save" 
    end 
    @prospects = Prospect.all 
end 

の方法は、ログ

Started POST "/prospects" for 127.0.0.1 at 2011-02-03 11:29:29 -0500 
    Processing by ProspectsController#create as JS 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"qzHvz5uBbmF8JIns1YAt4HlXyb34LWxbsIzZprnMeXM=", "email"=>"[email protected]", "body"=>"here you go: ford.ca, america.com\n"} 
does not save 
    Prospect Load (0.7ms) SELECT "prospects".* FROM "prospects" 
Rendered prospects/create.js.erb (0.4ms) 
Completed 200 OK in 93ms (Views: 23.7ms | ActiveRecord: 0.7ms) 
からの出力がされているなど、約10年でJSをコーディングしていません

2つの事柄に注意してください。 1.ログに "保存しません"が出力されます 2. create.js.erbがレンダリングされます。

最初の問題は、「保存しない」と記録しても、実際には保存されないということです。私は別のページでこの情報を引き出すことができます。

第二の問題は、create.js.erbはそれだけで次のように持っているということです。

$(alert('in create');) 

このアラートは発生しません。

私は自分のフォーム、私のAJAXリクエスト、または私のcreate.js.erbで何か間違っている必要があります。

<%= form_for(Prospect.create, :name => "pros", :remote => true) do |f| %> 
    <%= f.label :email, "Your email (we'll be good)" %> 
    <%= f.text_field :email, :name => "email" %> 
    <%= f.label :body, "Your comment" %> 
    <%= f.text_area :body, :name => "body" %> 
    <%= image_submit_tag("signup.png", :id => "image_submit_button") %> 
<% end %> 

そして、私のJSは、次のとおりです:私のフォームは、私は警告を取得しない

$.ajaxSetup({ 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Accept", "text/javascript"); 
     }, 
      cache: false 
      }); 


$(function() { 
     $('#image_submit_button').click(function(){ 
       alert('yarrrrrrr'); 
       $.ajax({ 
         data: 
         { prospect: {email: $("#prospect_email").val(), body: $("#prospect_body").val()} }, 
          url: '/prospects', 
          type: 'POST', 
          dataType: 'json', 
          success: function(response) 
          { 
           // $('div-you-want-to-replace').replaceWith('<div>Holy shit dude, you are teh awesome</div>'); 
           alert('it works captian'); 
          }, 
          error: function(xhr, ajaxOptions, thrownError) { 
          alert('noooo'); 
         } 
        }); 

      }); 
    }); 

注意が私のAJAX POSTから "それはキャプテンの作品"、私は "nooooo" を取得します。だから私は明らかに間違ったことをしている。

だから、3つの質問:

  1. 私は私のコントローラは@prospectを節約することを実現するために何をすべきか?
  2. create.js.erbを実行するにはどうすればよいですか? (私はこれがライトボックスを持っていて、彼らのコメントの見込み客に感謝しているはずだと思う)
  3. ポストが成功したときにAJAXコードがエラーアラートを実行しないようにするにはどうすればよいですか?

    <%= form_for(Prospect.create, :name => "pros", :remote => true) do |f| %> 
    

    はすでにProspect.createによる見通しを保存している:

答えて

1

わからない場合こちらあなたの問題ではなく、このコードがあります。プロスペクトを置くこともできます。

関連する問題