Bad query?

I have a find() query inside a for loop. Basically, I want the loop to
go through all elements in User.accounts and find all elements in
Accounts that have the same name as each element (to see other users
who have accounts with the same name).

Right now my code is as follows:

<table>
<%@session['user'].accounts.each do |i| %>
<%Accounts.find(:all, :conditions => ["coursenumber LIKE ?",

“%#{i.coursenumber}%”]).each do |account| %>

        <tr>
        <td><%= account.coursename %></td>
        <td><%= account.coursenumber %></td>
        <td><%= account.user_id%></td>
		<td><%= account.first_name%> <%= account.last_name%></td>
		<td><%= link_to 'Show', :controller=>'user', :action=>'userdetails',

:id=> account.user_id %>

        <%end%>
<% end %>

This has the effect of outputting every single account in the Accounts
table. I’d like to restrict it to just outputting those accounts with
the same course name/number as each one of the User’s.

Thanks a lot,

  • Raffi.

On 7/24/06, [email protected] [email protected] wrote:

    <%Accounts.find(:all, :conditions => ["coursenumber LIKE ?",

:id=> account.user_id %>

Thanks a lot,

  • Raffi.

Hmm, looks like a Rails problem, although there are a lot of nice
people
around who might be willing to help, sorry I cannot :(, I think you
should
post to the Rails Mailing List.
http://www.rubyonrails.org/community

Cheers
Robert


Deux choses sont infinies : l’univers et la bêtise humaine ; en ce qui
concerne l’univers, je n’en ai pas acquis la certitude absolue.

  • Albert Einstein

Try to fiddle with the condition… what are your course numbers like?
J.

On 7/24/06, [email protected] [email protected] wrote:

    <%Accounts.find(:all, :conditions => ["coursenumber LIKE ?",

:id=> account.user_id %>

Thanks a lot,

  • Raffi.

You could simplify this a lot by using a db IN condition.

Does this need to be a LIKE condition or are the course numbers in fact
the
same.

Assuming that they are the same

<% course_numbers = session[‘user’].accounts.map { |a| a.coursenumber
}.uniq
%>
<% Account.find( :all, :conditions => [ “coursenumber IN (?)”,
course_numbers] ).each do |acc| %>

<% end %>

If they really do need a LIKE condition then I would only want to hit
the db
once. Who knows how many accounts there may be. You may have a better
time
with the ez_where plugin by Ezra ( http://brainspl.at ) but one way
could
be.

<% course_numbers = session[‘user’].accounts.map { |a| a.coursenumber
}.uniq
%>
<% course_query = course_numbers.inject([]) { |arr,cn| arr <<
"coursenumber
LIKE ‘%#{coursenumber}%’ "} %>
<% Account.find(:all, :conditions => course_query.join( " OR " ) ).each
do
|acc| %>

<% end %>

This is probably not too good to have this logic in your view anyway
tho.
Perhaps you should make this into a class method for account

in account.rb

def Account.find_similar_accounts( *accounts )
accounts = accounts.flatten
course_numbers = accounts.map { |a| a.coursenumber }.uniq
Account.find(:all, :conditions => [ “coursenumber IN (?)”,
course_numbers]
)
end

Then in your view

<% Account.find_similar_accounts( session[‘user’].accounts ).each do
|acc|
%>

<% end %>

I hope I haven’t misunderstood your problem too badly…

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs