How to use SQL without a model?

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).

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

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

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

Fred

John Smith 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.

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.

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 Smith wrote:

David Harkness wrote:

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