2011-12-24 1 views
0

面白いと思うパンチラインに投票できるウェブサイト(GiggleTrigger.com) 。これはajaxコールを介して行われるように設定されていましたが、Rails 3.1にアップグレードした後、これを壊したようです。私はjQueryにjavascriptを更新しようとしましたが、まだ動作していません。Rails 3.1にアップグレードされ、jQueryに変更されました。現在、私のajaxはフィールドを更新していないようです。

ここで(ビュー/投票/ create.js.rjsに配置された)古いjavascriptのコードされています

page.replace_html "vote_total_#{@punchline.id}", "#{@punchline.votes.size}" 

ここでビュー/投票/ create.jsに配置しようとしました更新されたコードは(あります.erb):

:ここ

$("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size %>"); 

は、ビュー/ punchlines/_punchline.html.erbに配置されたHTML()であります私はこのエラーを取得しています*

class VotesController < ApplicationController 
    def create 
    @punchline = Punchline.find(params[:punchline_id]) 
    @vote  = @punchline.votes.build params[:vote] 
    @vote.user = current_user 

    respond_to do |format| 
     if @vote.save 
     format.js   
     format.html { redirect_to @punchline } 
     else 
     format.html { redirect_to root } 
     end 
    end 
    end 
end 

:ここでは3210

<span id="vote_total_<%= punchline.id %>" class="punchline_votes"> <%= punchline.votes.size %> </span> <span id="vote_button"> <%= button_to 'giggle', punchline_votes_path(:punchline_id => punchline), :remote => true %> </span> 

は、コントローラのコード(コントローラ/ votesController.rbに配置された)である

ActionView::Template::Error (undefined method `model_name' for Fixnum:Class): 
    1: $("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size %>"); 
     app/views/votes/create.js.erb:1:in `_app_views_votes_create_js_erb__1782616409977082835_2168430380' 
     app/controllers/votes_controller.rb:7:in `create 

のでこれは整数が渡される問題のようですが、私はこのように.to_sメソッドを追加します:

$("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size.to_s %>"); 

しかし、私はこのエラーを取得する:

$("#vote_total_#{@punchline.id}").html("<%= escape_javascript render :partial => 'punchline', :object => @punchline.votes.size %>"); 
しかし、その後、私はこのエラーを取得する:私はそうのような部分を追加しよう

ActionView::Template::Error (Missing partial votes/1, application/1 with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in: 
    * "/Users/Daniel/Sites/giggle/app/views" 
    * "/Users/Daniel/.rvm/gems/[email protected]/gems/devise-1.5.3/app/views" 
): 
    1: $("#vote_total_#{@punchline.id}").html("<%= escape_javascript render @punchline.votes.size.to_s %>"); 
    app/views/votes/create.js.erb:1:in `_app_views_votes_create_js_erb__1782616409977082835_2187483480' 
    app/controllers/votes_controller.rb:7:in `create' 

ActionView::Template::Error (Missing partial votes/punchline, application/punchline with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in: 
    * "/Users/Daniel/Sites/giggle/app/views" 
    * "/Users/Daniel/.rvm/gems/[email protected]/gems/devise-1.5.3/app/views" 
): 
    1: $("#vote_total_#{@punchline.id}").html("<%= escape_javascript render :partial => 'punchline', :object => @punchline.votes.size.to_s %>"); 
    app/views/votes/create.js.erb:1:in `_app_views_votes_create_js_erb__1782616409977082835_2185760740' 
    app/controllers/votes_controller.rb:7:in `create' 

私がクズボタンをクリックすると、モデルオブジェクトに投票が追加されますが、ページを更新しない限り、ビューは更新されません。明らかに、私はリフレッシュせずにajaxを通してそれが起こることを望んでいます。ありがとうございました!

+0

VALUESをokです。 ?配列内の値で補間されます(ログラインの残りの部分を参照してください) – BlueFish

+0

"puts params.inspect"を試して、ポストリクエストで値を取得しているかどうかを確認してください... – BlueFish

+0

"動作しない" IDのように送信され、アクションは発砲しています。 –

答えて

0

さて、私はそれを理解しました。古いプロトタイプコード:

page.replace_html "vote_total_#{@punchline.id}", "#{@punchline.votes.size}" 

は、要素にルビデータをポストするために#{}を使用します。しかし、jQueryはidを表すために#を使います。だから、私は<% =%に#{}からの私のjqueryのセレクタを変更>、それが問題解決:(????、、、)

$("#vote_total_<%= @punchline.id %>").html("<%[email protected]%>"); 
1

あなたはJavaScriptに

if(!document.getElementById("vote_total_#{@punchline.id}")) { 
    alert("Id doesn't exist: " + "vote_total_#{@punchline.id}"); 
} 

を追加することができますし、idが悪い場合には、警告を表示します。そのidを持つ要素が存在しないという意味は間違っています。私は実際にクライアントのために生成されるものが何か不思議です。これはほとんどの場合クライアント側のすべてのものです。

また、コンソール(放火魔やWebKitのインスペクタ)を確認し、XMLHttpRequestのログを有効にし、あなたがクスクスをクリックすると、任意の実際のアヤックスが行われているかどうかを確認する必要がありますWebKitのインスペクタ-For D

があり、ウィンドウの右下に歯車のアイコンが表示されます。これをクリックすると、XHRを記録するオプションが表示されます。

- 誰かがFirebugにコメントすることができれば、それはすばらしいでしょう。

+0

idは良いです。 XMLHttpRequestのログは有効ですが、エラーは表示されません。 – thatdankent

+0

XHRが発生していませんか? –

+0

私はそれに答える方法を知らない。私はそこにいると思う。 – thatdankent

関連する問題