Forum: Ruby on Rails Difficult model.find

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Leon B. (Guest)
on 2007-08-01 00:33
Hi all!

I have this declaration model: http://pastie.caboo.se/83840

What I want to do:
get all users that not belong to the declaration.

I could do a loop. First get all the users. I know who belong to the
declaration, so I also know who does not.
But this seems like a lot of looping.

Is there an easy way I can get all those users that NOT belong to the
declaration?  I looked into using joins in my find, but I don't know how
to use that in this context.

Thanks in advance!
nachokb (Guest)
on 2007-08-01 18:32
(Received via mailing list)
I can only think of doing it in Ruby:

  def other_users
    User.find(:all) - self.users
  end

there must be a more efficient way to do it via ActiveRecord
(therefore, only one query), something like

  def other_users
    User.find :all, :conditions => ["declaration_id <> ?", self.id]
  end

(or something like that, you get the idea, it's awfully not
abstracted).

Bye,

nachokb

On Jul 31, 5:33 pm, Leon B. <removed_email_address@domain.invalid>
Kip (Guest)
on 2007-08-02 05:00
(Received via mailing list)
Leon,  I think a left outer join of Users on Declarations would do
it.

in SQL that would be:
  SELECT * from Users left outer join Declarations ON Users.user_id =
Declarations.user_id WHERE Declarations.user_id IS NULL

in ActiveRecord, an :includes does a left outer join so (I may not get
this 100% right)
  User.find(:all, :conditions => "declarations.user_id is
NULL", :include => "declarations")

Cheers, --Kip


On Aug 1, 4:33 am, Leon B. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.