I needed to be able to figure out if a field of a model was a foreign key or
not, and couldn't figure out a way to do that with the existing Sequel methods.
I ended up resorting to this, which feels pretty bodgy:
module Sequel
class Model
def self.foreign_keys
Hash[*DB["SELECT tc.constraint_name, kcu.column_name
FROM information_schema.table_constraints AS tc JOIN
information_schema.key_column_usage AS kcu using (constraint_name)
WHERE constraint_type = 'FOREIGN KEY' AND
tc.table_name='#{self.table_name}'"].collect{|row|
[row[:column_name].to_sym,
row[:constraint_name]]
}.flatten]
end
end
end
Why do I want to know? Because I'm building HTML forms for editing models, and
fields which are foreign keys should be ignored, whereas fields which are names
or dates or whatnot should get input boxes.
I *think* there is an association for every foreign key on all my models, but
I'm not sure, because my associations have become rather complex; many of my
many-to-many linking tables contain critical characteristics for the
relationship, and Sequel's native behavior is to hide the entire linking table,
so I've had to create a number of intermediate views.
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.