Rails with Ajax

Hi all,

I am quite new to Rails.

The code below loads a set of data from the database. When I click on one of the item from db, it will load more details of same item from database and display in the <div> next to it.

See listings below to see code snippet:

listing 1(search.html.erb)

Is that a “j” after the = ??

Javier Q.

Well, you go here, right?

yourapp.com/search ?

Then the @group_trace is nil because it’s not created until you run the loader action.

Linus Pettersson wrote in post #1044801:

Well, you go here, right? yourapp.com/search ?

Then the @group_trace is nil because it's not created until you run the loader action.

Does this mean the logic of this app is wrong, how else can I do this right?

Javier Quarite wrote in post #1044799:

Well, the code in the search view is executed when the view is rendered. It is not executed again when you inject the html using javascript.

So the if @group_trace code is only executed when the search view is rendered and @group_trace is not created yet.

What are you actually trying to achieve? What do you want to do with the if @group_trace code part? Why not just remove it? You’re still adding the data by injecting the html using javascript.

Linus Pettersson wrote in post #1045014:

Well, the code in the search view is executed when the view is rendered. It is not executed again when you inject the html using javascript. So the if @group_trace code is only executed when the search view is rendered and @group_trace is not created yet.

What are you actually trying to achieve? What do you want to do with the if @group_trace code part? Why not just remove it? You're still adding the data by injecting the html using javascript.

If I remove it, it throws a nil object exception which basically means the object is empty.

I just want to click on this link in search.html.erb:

<a data-remote="true" href="<%= trace_loader_url (tbl_trace) %>?short_exchange_id=<%= tbl_trace.short_exchange_id %>"> <h6> <%= tbl_trace.short_exchange_id %> </h6> <%= tbl_trace.short_exchange_id %></a>

and it should load the data returned in trace_controller.rb:

def loader @group_trace = TblTrace.find_by_sql("select top (1) * from tbl_traces         where short_exchange_id = '" + params[:short_exchange_id] + "' order by created_on desc")

and display in the div in seach.html.erb here:

<div id="loader_div" name="loader_div"> <% if @group_trace %> <%= render(@group_trace) %> <% end %> </div>

Yes, but the code in the search view is not executed again when the AJAX request is fired :slight_smile:

So, you have to do the check in your loader.js.erb and not the search view. Something like this should work:

<% if @group_trace %>

$(‘#loader_div’).html(“<%=j render(@group_trace)%>”);

<% end %>

Cheers!

Linus Pettersson wrote in post #1046510:

Yes, but the code in the search view is not executed again when the AJAX request is fired :slight_smile:

So, you have to do the check in your loader.js.erb and not the search view. Something like this should work:

<% if @group_trace %> $('#loader_div').html("<%=j render(@group_trace)%>"); <% end %>

Cheers!

I tried this but I get this error

Extracted source (around line #19):

undefined method `model_name' for NilClass:Class

18: <div id="loader_div" name="loader_div"> 19: <%= render(@grouptrace) %> 20: </div>

This is telling you that @grouptrace is nil. You dropped the underscore from inside the name. (Minirant: This is one of the things I don't like about languages letting you reference undeclared variables. You can't tell "I deliberately haven't set it yet, so the fact that it's nil is significant" from a typo.)

-Dave