-1

So I've been trying to add some AJAX to my home page with rjs and I get this javascript error in a popup window:

RJS error:

TypeError: Cannot call method 'getElementsByTagName' of null

Below is all of the relevant code.

Here's my code in app/views/microposts/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

Here's app/views/pages/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 %>

Here's my feed partial app/views/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 %>

Here's my feed item partial app/views/shared/_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>

And lastly here is the relevant part of my microposts controller:

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
  • 1
    Please describe your questions in the title, title is just to generic, it could be I get a TypeError: Cannot call method 'getElementsByTagName' of null in Rails. Commented Mar 4, 2011 at 0:00

2 Answers 2

1

Given that it's an RJS error, the problem would lie in create.rjs

Try commenting out page.replace_html :notice, flash[:notice] to see if that works.

Sign up to request clarification or add additional context in comments.

5 Comments

Ahh ok yeah. Now I don't have a js error but the new post doesn't appear until I refresh the page. I also no longer get the flash message...
Oh never mind, the post does appear! How do I get the flash message though? And why doesn't page.replace_html :notice, flash[:notice] work?
The reason it's not working is because there's (probably) no element on in your HTML with an id of notice. Try adding <div id="notice"></div> to your page somewhere, un-comment the line and see if it works.
I tried adding it to where the flash is being rendered in my application layout, but wasnt able to get it by the id.
I added a question about this: stackoverflow.com/questions/5187965/…
0

getElementsByTagName fails because it cannot find the identifier you are trying to replace. Most likely you do not have any elements on the page with the id of bottom, user_info or notice. Often times I have accidentally set the div's class but not the id, etc.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.