« Return to Thread: Get a list of all foreign keys (with their respective tables

Re: Get a list of all foreign keys (with their respective tables

by Pardee, Roy :: Rate this Message:

Reply to Author | View in Thread


I'm no guru, so I'll give the non-guru answer.  If it works, it's sensible. ;-)

Seriously, if you wanted to make it a bit more db-agnostic (is that a goal?) you could use the .tables(), .columns() and .indexes() methods on ActiveRecord::Base.connection to get your list of those things.  Of course if that's a goal, you'll want to switch over to add_index as well, instead of doing the raw sql thing.

-----Original Message-----
From: rubyonrails-talk@... [mailto:rubyonrails-talk@...] On Behalf Of Max Williams
Sent: Thursday, September 18, 2008 1:33 AM
To: rubyonrails-talk@...
Subject: [Rails] Re: Get a list of all foreign keys (with their respective tables


Roy Pardee wrote:
> Ach, of course.  Thanks Fred.

I actually ended up not going via the classes, but just dealing with the database direct:

def index_all_tables_foreign_keys
  sql = ActiveRecord::Base.connection
  tables = sql.select_values("show tables")
  messages = []
  tables.each do |table|
    foreign_key_column_hashes = sql.select_all("desc #{table}").select{|hash| hash["Field"].match(/_id$/)}
    foreign_key_column_hashes.each do |column_hash|
      begin
        if column_hash["Key"] == ""
          sql.execute("alter table #{table} add index(#{column_hash["Field"]})")
          messages << "added index to #{table}:#{column_hash["Field"]}"
        end
      rescue
        messages << "FAILED to add index to #{table}:#{column_hash["Field"]}"
      end
    end
  end
  messages
end

I invite (genuinely, without sarcasm) the ruby/rails gurus to rip it to shreds.  Is this a sensible approach?
--
Posted via http://www.ruby-forum.com/.



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@...
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@...
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

 « Return to Thread: Get a list of all foreign keys (with their respective tables