On Sep 1, 2:35 pm, Dave Howell <[email protected]> wrote:
> 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.

Sequel doesn't currently have a method do this.  I'm not opposed to
adding one, but before it's added it should be portable, with at least
the commonly used shared database adapters implementing it
(PostgreSQL, MySQL, SQLite).

Also, the method would have to be a Database instance method, similar
to schema and indexes, not a Model instance method.

Jeremy

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

Reply via email to