C'è qualcosa di simile:RoR - Due formati responder con lo stesso blocco?
respond_to do |format|
format.html || format.xml do
#big chunk of code
end
end
vorrei farlo per il bene di DRY.
C'è qualcosa di simile:RoR - Due formati responder con lo stesso blocco?
respond_to do |format|
format.html || format.xml do
#big chunk of code
end
end
vorrei farlo per il bene di DRY.
respond_to permette in realtà di specificare il vostro blocco comune per i diversi formati utilizzando qualsiasi:
format.any(:js, :json) { #your_block }
In realtà penso che questa sia l'unica vera risposta utile. Non sono riuscito a ottenere la risposta "Proc" in esecuzione e questo è decisamente più breve e più pulito. Tks! – fenton
Inoltre, 'format.all' è un sinonimo di' format.any' se questo ha più senso per te. –
quando si
respond_to do |format|
format.html do
#block
end
format.xml do
#block
end
end
o
respond_to do |format|
format.html { #block }
format.xml { #block }
end
si sta approfittando di ruby blocks, che sono valutati come Procs. Quindi potresti fare
respond_to do |format|
bcoc = Proc.new do
# your big chunk of code here
end
format.html bcoc
format.xml bcoc
end
ma forse potresti spostare parte di quella logica nella tua struttura dati?
Ty Alex, andrò con questa soluzione in quanto posso limitare il formato accesso .js al codice format.html/xml. – miligraf
I blocchi ruby non sono Proc. Possono essere convertiti avanti e indietro, ma non sono la stessa cosa. –
@MatthewRatzloff La mia comprensione è che la sintassi del blocco è esattamente questa: la sintassi ruby più comune per definire una chiusura. Vedi [https://gist.github.com/3757938](https://gist.github.com/3757938). Cosa sono allora? Felice di essere corretto. –
È possibile utilizzare un formato simile a questo:
class PeopleController < ApplicationController
respond_to :html, :xml, :js
def index
@people = Person.find(:all)
respond_with(@people) do |format|
format.html
format.xml
format.js { @people.custom_code_here }
end
end
end
Che sarebbe ottenere quello che stai cercando, se si dispone di una situazione che è più complessa fatemelo sapere. Vedi questo metodo article on the respond_with per ulteriore aiuto.
Perdonami per aver risposto fino ad ora, il fatto è: voglio format.html e format.xml condividere lo stesso gruppo di codice, ma ho anche format.js che non voglio che abbia accesso per format.html's o format.xml's code (che in questo caso sarebbe lo stesso). – miligraf
Utilizzare la versione modificata del codice sopra. Se avete domande fatemi sapere. –
modo quale formato si desidera che il blocco per tornare - HTML o XML? Puoi mettere tutta la logica al di fuori di respond_to e quindi solo formattarlo html/xml alla fine - ti aiuta? –
Vedere http://stackoverflow.com/a/2430682/265940 per una risposta migliore utilizzando format.any (: html,: xml) {...} –