Questo codice è basato sull'idea di un oggetto modulo link (vedi # 3 se non hai familiarità con il concetto).
Il mio codice effettivo in questione può essere trovato qui: link
Il codice accetta un hash di oggetti / attributi e crea un hash di ricerca inversa per tenere traccia delle loro deleghe per fare ciò.
delegate :first_name, :email, to: :user, prefix: true
Ma sto creando manualmente le deleghe da un hash come questo:
DELEGATIONS = {
user: [ :first_name, :email ]
}
In fase di esecuzione quando voglio cercare i nomi degli attributi tradotti per gli oggetti, tutto ciò che devo fare è il delegato / prefisso (devo usare un prefisso per evitare conflitti di nomi) nomi di attributi come: nome_utente_nome che non sono in sincronia con le rotaie in questo modo:
en:
activerecord:
attributes:
user:
email: 'Email Address'
Il codice che ho preso l'hash delle deleghe sopra riportato e lo trasforma in una tabella di ricerca, quindi quando sovrascrivo human_attribute_name posso recuperare il nome dell'attributo originale e la sua classe. Quindi invio #human_attribute_name alla classe originale con il nome dell'attributo originale come argomento.
Il codice che ho trovato funziona, ma a dir poco è brutto. Non ho mai usato davvero #inject, quindi questo è stato un corso accelerato per me e sono abbastanza insicuro se questo metodo efficace per risolvere il mio problema. Qualcuno potrebbe consigliare una soluzione più semplice che non richiede una tabella di ricerca inversa o sembra la strada giusta da percorrere?
Grazie, - FJM