2012-09-07 3 views
13

Desidero conoscere il nome del campo corrispondente alla didascalia della tabella per un determinato modello in Rails.Ottieni il campo chiave esterna dalle associazioni in Rails

Sto visualizzando didascalie utilizzando un modello di query.

query.columns.map {| q | q.caption}
=> [ "Tracker", "Stato", "Priorità", "Oggetto", "cessionario", "versione di destinazione", "Data di scadenza", "% Done"]

Colonna ha nomi corrispondenti alle didascalie

query.columns.map {| q | q.name}
=> [: inseguitore,: lo stato,: priorità: soggetto,: assigned_to,: fixed_version,: DUE_DATE,: done_ratio]

Il mio modello assomiglia

Issue.columns.map {| q | q.name}
=> ["id", "tracker_id", "project_id", "subject", "description", "due_date", "ID_categoria", "stato_id", "assegnato_to_id", "priority_id", " fixed_version_id", "author_id", "created_on", "updated_on", "data_iniziale", "done_ratio", "estimated_hours", "parent_id"]

voglio ottenere nome del campo (il nome del campo db) corrispondente a una didascalia delle informazioni di cui sopra.

associazione di esempio nel modello

belongs_to :assigned_to, :class_name => 'Principal', :foreign_key => 'assigned_to_id' 

Così, per suddetta associazione Voglio sapere la chiave esterna.

per assigned_to voglio 'assigned_to_id'

risposta

15

Il reflections hash detiene questo tipo di informazioni:

Issue.reflections['assigned_to'].foreign_key 

È inoltre possibile ottenere altre informazioni, come ad esempio la classe (.active_record) o il tipo di associazione (.macro). Prima di rails 4.2, le chiavi di questo hash sono simboli e non stringhe.

+0

questo ha funzionato per me ... Issue.reflections [: assigned_to] .Opzioni [: foreign_key] .. grazie –

1

Il modo corretto per Rails 4.2 è:

Issue.reflections['assigned_to'].options[:foreign_key] 

noti che "assigned_to" è una stringa secondo API:

restituisce un hash del nome della riflessione come chiave e un Associazione Riflesso come valore.

http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflections

+1

Nota: Questo restituirà solo le chiavi esterne personalizzate collegate alle opzioni di hash passato all'assistente dell'associazione. Quindi non funzionerà nei casi standard in cui la chiave esterna viene impostata automaticamente. BTW Frederick's Solution funziona ancora su Rails 4.2 – MhdSyrwan

+1

Effettivamente! Grazie per aver notato! Tuttavia, per far funzionare la soluzione di Frederick in Rails 4.2, il nome dell'associazione deve essere passato come una stringa anziché come un simbolo. –