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