# How to use SQL without a model?

**URL:** <https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904>\
**Category:** Rails\
**Created:** [June 19, 2008, 6:12pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904 "2008-06-19T18:12:04Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 6:12pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/1 "2008-06-19T18:12:04Z")

</div>

I want to do a SQL query, but I haven’t created a model. For example,  
instead of Car.find(:all) I want to be able to use SELECT \* from cars. I  
don’t have a Car model because this DB was not created with Rails (it’s  
from a PHP project).

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 6:31pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/2 "2008-06-19T18:31:25Z")

</div>

I don’t know, if that’s the best way to do it,  
since I nearly never had to use it that way.  
For most cases Model.find\_by\_sql was enough, but  
that requires at least a very basic model.

But you can run plain SQL like this:

@foo = ActiveRecord::Base::connection.execute(“SELECT ALL \* FROM  
cars”)  
and then @foo.each will give you all the data.

@foo is of class Mysql::Result  
I don’t know, what the methods are that this class has,  
but @foo.methods will give you a list and maybe  
you can find something useful

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 6:34pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/3 "2008-06-19T18:34:22Z")

</div>

On Jun 19, 5:30 pm, Thorsten Müller [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> @foo is of class Mysql::Result

if you use select\_all then you get an array of hashes which is  
probably easier to play with.

Fred

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 7:07pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/4 "2008-06-19T19:07:25Z")

</div>

I do this in a rails app of mine. I just set up regular ruby classes  
to handle it (not inherited from Active Record). Just because you’re  
using rails doesn’t mean you always have to use Active Record.

On Jun 19, 12:46 pm, John S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 6:46pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/5 "2008-06-19T18:46:41Z")

</div>

John S. wrote:

> I want to do a SQL query, but I haven’t created a model. For example,  
> instead of Car.find(:all) I want to be able to use SELECT \* from cars. I  
> don’t have a Car model because this DB was not created with Rails (it’s  
> from a PHP project).

Also I want to use a different database when I use this SQL queries. I  
mean, is a Ruby app, but uses this SQL queries to access to a different  
database.

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 7:08pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/6 "2008-06-19T19:08:09Z")

</div>

class Crm \< ActiveRecord::Base  
end  
class Connection1 \< Crm  
self.establish\_connection(:adapter =\> “mysql”,:username =\> ‘blah’,  
:password =\>  
‘badpassword’,:host=\>‘localhost’,:database=\>‘test\_development’)  
end  
class Connection2 \< Crm  
self.establish\_connection(:adapter =\> “mysql”,:username =\> ‘blah’,  
:password =\>  
‘badpassword’,:host=\>‘localhost’,:database=\>‘test\_development’)  
end

def self.method\_missing(method,\*args)  
if Crm::ALL.include? method.to\_s.classify  
eval(method.to\_s.classify)  
else  
super  
end  
end

puts Crm.send(:connection1).find\_by\_sql(“blah”)  
puts Crm.send(:connection2).find\_by\_sql(“blah”)

You can have as many “connections” as you like.  
Depending on file placement, you may need to preload the top CRM class  
as rails is loading.

John S. wrote:

> John S. wrote:
> 
> > I want to do a SQL query, but I haven’t created a model. For example,  
> > instead of Car.find(:all) I want to be able to use SELECT \* from cars. I  
> > don’t have a Car model because this DB was not created with Rails (it’s  
> > from a PHP project).
> 
> Also I want to use a different database when I use this SQL queries. I  
> mean, is a Ruby app, but uses this SQL queries to access to a different  
> database.

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [June 19, 2008, 11:11pm UTC](https://www.ruby-forum.com/t/how-to-use-sql-without-a-model/140904/7 "2008-06-19T23:11:18Z")

</div>

David H. wrote:

So I only need to create this class, into the model folder, isn’t it?  
Thanks, I will try it.
