2011-03-03 20 views
-1

だから私はRJSで私のホームページにいくつかのAJAXを追加しようとしてきたと私はポップアップウィンドウにこのjavascriptのエラーが表示されます。以下は私のRuby on Railsコードで何が問題になっていますか?

RJS error:

TypeError: Cannot call method 'getElementsByTagName' of null

関連するコードのすべてです。

はここでアプリ/ビュー/マイクロポスト/ create.rjsで私のコードです:

page.insert_html :bottom, :feed_items, :partial => 'shared/feed_item', :object => @micropost 
page.replace_html :user_info, pluralize(current_user.microposts.count, "micropost") 
page[:micropost_form].reset 
page.replace_html :notice, flash[:notice] 
flash.discard 

ここでアプリ/ビュー/ページ/ home.rbです:

<% if signed_in? %> 
    <table class="front" summary="For signed-in users"> 
    <tr> 
     <td class="main"> 
     <h1 class="micropost">What's happening?</h1> 
    <%= render 'shared/micropost_form' %> 
    <%= render 'shared/feed' %> 
    </td> 
    <td class="sidebar round"> 
    <%= render 'shared/user_info' %> 
    <%= render 'shared/stats' %> 
    </td> 
</tr> 
</table> 
<% else %> 
<h1>Sample App</h1> 

<p> 
    This is the home page for the 
    <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a> 
    sample application. 
</p> 

<%= link_to "Sign up now!", signup_path, :class => "signup_button round" %> 
<% end %> 

ここに私のフィード部分のアプリ/ビューです/shared/_feed.html.erb:

<% unless @feed_items.empty? %> 
    <table id="feed_items" class="microposts" summary="User microposts"> 
    <%= render :partial => 'shared/feed_item', :collection => @feed_items %> 
    </table> 
    <%= will_paginate @feed_items %> 
<% end %> 

は、ここに私のフィード項目部分アプリ/ビュー/共有/ _feed_item.html.erb

ですここ
<tr id = "feed_item"> 
    <td class="gravatar"> 
    <%= link_to gravatar_for(feed_item.user), feed_item.user %> 
    </td> 
<td class="micropost"> 
    <span class="user"> 
     <%= link_to feed_item.user.name, feed_item.user %> 
    </span> 
    <span class="content"><%= feed_item.content %></span> 
    <span class="timestamp"> 
     Posted <%= time_ago_in_words(feed_item.created_at) %> ago. 
    </span> 
    </td> 
    <% if current_user?(feed_item.user) %> 
    <td> 
    <%= link_to "delete", feed_item, :method => :delete, 
            :confirm => "You sure?", 
            :title => feed_item.content %> 
    </td> 
    <% end %> 
</tr> 

そして最後に私のマイクロポストコントローラの関連する部分である:

class MicropostsController < ApplicationController 
    before_filter :authenticate, :only => [:create, :destroy] 
    before_filter :authorized_user, :only => :destroy 

    def create 
    @micropost = current_user.microposts.build(params[:micropost]) 
    respond_to do |format| 
     if @micropost.save 
     flash[:success] = "Micropost created!" 
     format.html { redirect_to root_path } 
     format.js 
     else 
     @feed_items = [] 
     render 'pages/home' 
     end 
    end 
    end 
+1

タイトルにはあなたの質問を記述してください。タイトルは一般的なものです。TypeErrorを得ることができます: 'getElementsByTagName' Rails。 – daniel

答えて

1

それはRJSの誤りだと考えると、問題はそれかどうかを確認するためにpage.replace_html :notice, flash[:notice]をコメントアウトしてみcreate.rjs

にあるのでしょう働く

+0

ああ、そうです。今私はjsエラーはありませんが、私はページを更新するまで、新しい投稿は表示されません。私はもはやフラッシュメッセージを取得しません... –

+0

ああ、心配しないでください、投稿が表示されます!どうやってフラッシュメッセージを受け取ることができますか?なぜ、 'page.replace_html:notice、flash [:notice]'は動作しないのですか? –

+1

それはうまくいかない理由は、(おそらく)あなたのHTMLに 'notice'の' id'を持つ要素がないからです。どこかのページに '

'を追加して、その行のコメントを解除し、それが動作するかどうか確認してください。 –

0

getElementsByTagNameは、置換しようとしている識別子が見つからないため失敗します。ほとんどの場合、bottom、user_infoまたはnoticeのIDを持つ要素はページにありません。私は間違いなくdivのクラスを設定していますが、IDなどはありません。

関連する問題