Domanda

Sto scrivendo un'app che - analogamente a molte altre app - è composta per il 90% da normali CRUD e per il 10% " juice " ;, dove abbiamo bisogno di cattive logiche aziendali e maggiore flessibilità e personalizzazione.

Riguardo a questo 90%, stavo cercando di attenermi il più possibile al principio DRY. Finché i controller vanno, ho scoperto che resource_controller funziona davvero e ho potuto eliminare tutti i controller in quell'area, sostituendoli con uno generico.

Ora vorrei sapere come ottenere lo stesso con le visualizzazioni. Su questa app ho un layout complessivo, application.html.erb e quindi devo avere un altro livello di layout, comune per tutte le viste CRUD e infine un & Quot; core & Quot; parte:

  • Su index.html.erb tutto ciò di cui ho bisogno per generare una semplice tabella con i campi e le etichette che indico.

  • Per i nuovi e le modifiche, anche l'edizione del modulo generico, che indica etichette e campi (con la possibilità di fornire campi personalizzati se necessario).

  • Non sono sicuro che avrò bisogno di mostrare, ma se lo faccio sarebbe lo stesso di nuovo e modifica.

Quali plugin e strumenti (o anche articoli e puntatore generale) mi aiuterebbero a farlo?

Grazie, Felipe.

È stato utile?

Soluzione

Se hai DRY-up dei controller e ora desideri DRY le viste, un approccio è render :action => *actionname* e la memorizzazione dei contenuti dell'interfaccia utente che possono cambiare in variabili di istanza (in modo che siano disponibili nella vista) in questo modo essere in grado di riutilizzare la stessa vista di modifica , nuovo , elenco o mostra . Ad esempio, stai modificando qualcosa relativo a Foo , quindi il tuo titolo dovrebbe essere Editing <%= @type %>, così come i tuoi aiutanti del modulo. Foo potrebbe quindi cambiare in barra . Quindi stai riutilizzando la stessa vista per entità diverse (o controller dovrei dire). Ricorda che, a differenza di redirect_to, render :action esegue il rendering della vista e non chiama l'azione del controller dell'azione che sta tentando di eseguire il rendering.

Una cosa è certa, se desideri ASCIUGARE qualcosa, devi standardizzare o seguire una convenzione. Esempio, la struttura delle viste, in questo caso.

Altri suggerimenti

Puoi eseguire script/generate scaffold test name:string description:text valid:boolean e guardare le viste che genera (ed eseguire script/destroy scaffold test per rimuovere i file). Questo ti darà una buona idea del modo standard di scrivere le 4 viste Rails predefinite.

Vorrei anche raccomandare di leggere i capitoli pertinenti in " Agile Web Development with Rails " e " The Rails Way " ;.

Se hai viste esistenti che devono essere ripulite, questo episodio di Railscasts è fantastico: Pulizia della vista

Dary

Sembra che ci sia solo una nuova gemma molto vicina alle tue esigenze:

http://github.com/codez/dry_crud

Basato su una superclasse comune (CrudController), è possibile ereditare la funzionalità CRUD per i vari controller del modello e adattare ciò che è speciale lì. Questo è quello che hai già fatto, molto probabilmente.

La novità di dry_crud è che anche le viste e i parziali sono ereditabili. Definisci un modello base comune per ogni azione CRUD, forse diviso in un paio di parziali. Grazie agli helper forniti, i moduli e le tabelle possono essere genericamente definiti osservando le definizioni delle colonne del modello corrente. Nelle viste del tuo modello specifico, puoi quindi adattare solo i parziali o le viste che devono essere personalizzate.

Dai un'occhiata alla documentazione trovata sul sito sopra e rimani ASCIUTTO!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top