Salve a tutti,
non riesco a capire come snellire il seguente codice:
def acronym_page
@page=Page.find(params[:id])
@page.description=@page.description.gsub(/ PPC /," <acronym
title=#{34.chr}Pocket PC#{34.chr}>PPC</acronym> ")
@page.description=@page.description.gsub(/ DVD /," <acronym
title=#{34.chr}Digital Versatile Disc#{34.chr}>DVD</acronym> ")
if @page.save
flash[:notice] = 'Acronimi sostituiti.'
redirect_to :action=>'modpag',:id=>@page
end
end
def acronym_image
@picture=Picture.find(params[:id])
@picture.text=@picture.text.gsub(/ PPC /," <acronym
title=#{34.chr}Pocket PC#{34.chr}>PPC</acronym> ")
@picture.text=@picture.text.gsub(/ DVD /," <acronym
title=#{34.chr}Digital Versatile Disc#{34.chr}>DVD</acronym> ")
if @picture.save
flash[:notice]='Acronimi sostituiti.'
redirect_to :action=>'modpict',:id=>@picture.guide.id
end
end
ho riportato solo due delle sostituzioni che mi servono e cioé PPC e DVD
ma ce ne sono più di venti.
Non riesco a capire come e dove scrivere una subroutine alla quale
passare la tabella e la riga da modificare.
Nella tabella @page devo modificare la riga description mentre nella
tabella @picture la riga text.
Grazie mille per l'aiuto
on 2013-02-05 00:35
on 2013-02-05 00:47
Metti la parola da sostituire come chiave in un hash, con il testo sostitutivo come valore, e itera su quello :) Il giorno 05/feb/2013, alle ore 00:35, Luigi Maresca <marluigi@libero.it> ha scritto:
on 2013-02-05 01:12
Mi sono divertito un po' :) https://gist.github.com/4710943 Oppure in console: > irb(main):003:0> AcronymSolver.new(" PPC DVD PPC ").solve! > => " <acronym title=\"Pocket PC\">PPC</acronym> <acronym title=\"Digital > Versatile Disc\">DVD</acronym> <acronym title=\"Pocket PC\">PPC</acronym> " > In pratica, la classe AcronymSolver si occupa solo di fare queste sostituzioni di acronimi; la puoi spostare in /lib e usare un po' dappertutto. L'unico pezzo un po' pi incasinato questo gsub: text.gsub!(/ #{acronym} /, %[ <acronym title="#{solution}">#{acronym}</acronym> ]) in pratica, con l'operatore %[] puoi creare delle stringhe quotate senza dover fare l'escape del double-quote (cfr. http://teohm.github.com/blog/2012/10/15/start-usin... ) Chiedi pure se hai domande, ciao! Ju --* *M.Sc. Ju Liu Card: http://zerp.ly/ju-liu -- Societ Cooperativa weLaika - Impresa Sociale Corso Vigevano 14/B, 10154 Torino (TO), Italy http://welaika.com - info@welaika.com 2013/2/5 Sante Gennaro Rotondi <saten.r@gmail.com>
on 2013-02-05 14:12
Ragazzi, perdonatemi ma non ho capito come utilizzare entrambe le soluzioni. Mi dite un pò più nello specifico dove, nell'applicazione web, scrivere e cosa. Grazie infinite.
on 2013-02-05 15:24
puoi prendere la classe di Ju e fare delle prove in un file (oppure la
incolli dentro Pry), infine la usi passando una stringa ;-)
AcronymSolver.new("un testo a piacere che contenga DVD o PPC").solve!
nei vari codici postati, ci sono due metodi #acronym_page e
#acronym_image che in realt andrebbero messi in un ipotetico controller
di rails (assieme a vari model e views).
tuttavia non ti conviene: se vuoi giocherellare con il codice, puoi
partire dalla classe che ha creato Ju e incollarla in un file prova.rb
(nome di fantasia) ed eseguirlo in shell con:
ruby prova.rb
ciao,
A.
Il giorno 05/feb/2013, alle ore 14:12, Luigi Maresca
<marluigi@libero.it> ha scritto:
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
--
http://andreapavoni.com
on 2013-02-06 23:54
Vi ringrazio ancora per il tempo che mi state dedicando ma, purtroppo,
per mia incompetenza non riesco a capire la vostra soluzione in
particolare non ho capito come poter utilizzare la soluzione di Ju.
Vorrei far presente che la mia web app (software-windows.net) gira su
ruby 1.8.6 e rails 2.0.2.
Vorrei però darvi qualche altro dettaglio sulla soluzione che ho trovato
io:
i due metodi acronym_page e acronym_image sono sempre stati nel
controller admin_controller.rb e funzionano perfettamente scritti nel
modo in cui li ho riportati nel post di apertura.
Nel tentativo di creare una subroutine comune ho scritto in
application.rb il seguente codice:
def sostituzione_abbr(item)
item.description=item.description.gsub(/ PPC /," <acronym
title=#{34.chr}Pocket PC#{34.chr}>PPC</acronym> ")
....
end
che funziona perfettamente richiamata da admin_controller.rb così:
def acronym_page
@page=Page.find(params[:id])
sostituzione_abbr(@page)
if @page.save
flash[:notice]='Acronimi sostituiti.'
redirect_to :action=>'modifica',:id=>@page
end
end
il problema a questo punto è che in application.rb devo, per far
funzionare la subroutine, necessariamente agganciare direttamente la
"colonna" description con il comando item.description.
Scrivo: "necessariamente" perché se la passo direttamente come variabile
attraverso la chiamata:
sostituzione_abbr(@page.description)
non funziona!
Se funzionasse avrei risolto tutti i miei problemi perché potrei
richiamare in ogni metodo la subroutine in questione sotituendo la
variabile con quella che voglio elaborare.
Grazie ancora per l'aiuto.
Luigi
on 2013-02-07 11:56
Il giorno 06/feb/2013, alle ore 23:54, Luigi Maresca <marluigi@libero.it> ha scritto: > Vi ringrazio ancora per il tempo che mi state dedicando ma, purtroppo, > per mia incompetenza non riesco a capire la vostra soluzione in > particolare non ho capito come poter utilizzare la soluzione di Ju. mi permetto di consigliarti che, magari, il caso di studiare ruby un po' di pi, almeno per riuscire a capire/usare quelle 20 righe di codice :P > Vorrei far presente che la mia web app (software-windows.net) gira su > ruby 1.8.6 e rails 2.0.2. sono versioni molto datate (~2007) e non pi supportate, probabile che molti consigli/guide/gemme non possono essere applicati :-/ ovviamente non il caso degli acronimi, per giusto per avvisarti ;-) > Nel tentativo di creare una subroutine comune ho scritto in > application.rb il seguente codice: attenzione: specifica il percorso completo, perch "application.rb" troppo ambiguo, ti trovi in config/ o in app/controllers/ ? presumo sia app/controllers/ perch prima di rails3, se non ricordo male, si chiamava application.rb anzich application_controller.rb :P > def acronym_page > @page=Page.find(params[:id]) > sostituzione_abbr(@page) > if @page.save > flash[:notice]='Acronimi sostituiti.' > redirect_to :action=>'modifica',:id=>@page > end > end ho capito che hai bisogno di sostituire gli acronimi con la loro descrizione, tuttavia, per curiosit, ti chiedo come mai hai una action nel controller che applica la sostituzione e salva la pagina :-O mi viene da pensare che sia un'operazione una-tantum (dopo la prima volta, gli acronimi sono gi sostituiti e salvati su db). forse ti conveniva scrivere un task Rake o farlo a manina dalla console di rails. > il problema a questo punto che in application.rb devo, per far > funzionare la subroutine, necessariamente agganciare direttamente la > "colonna" description con il comando item.description. > > Scrivo: "necessariamente" perch se la passo direttamente come variabile > attraverso la chiamata: > sostituzione_abbr(@page.description) > non funziona! non funziona perch se passi il "valore" di @page.description non vai a modificare la colonna di @page, ma solo la stringa 'as-is'. in alternativa, puoi fare qualcosa del genere: def sostituzione_abbr(text) text.gsub(/ PPC /," <acronym title=#{34.chr}Pocket PC#{34.chr}>PPC</acronym> ") . return text end def acronym_page @page=Page.find(params[:id]) @page.description = sostituzione_abbr(@page.description) ... end abbastanza brutto da scrivere e sicuramente si possono adottare soluzioni pi pulite, ma dovrebbe funzionare ;-) > Se funzionasse avrei risolto tutti i miei problemi perch potrei > richiamare in ogni metodo la subroutine in questione sotituendo la > variabile con quella che voglio elaborare. che vuoi sostituire gli acronimi chiarissimo, non chiaro come/quando vuoi farlo: modificare articoli esistenti? dopo la creazione? in fruizione? ciao, A. -- http://andreapavoni.com
on 2013-02-07 22:03
Grazie mille per la risposta e per il consiglio purtroppo ho poco tempo per studiare (lavoro). L'applicazione è vecchia e sul server è anche freezata però l'ho scritta tutta da zero e senza alcuna gemma, ci sono affezionato...scherzi a parte mi piacerebbe aggiornarla ma mi manca il tempo per farlo. L'operazione che eseguo è una tantum e manuale e dopo il caricamento nel db per questo non l'ho automatizzata. La soluzione del return text mi ha fatto capire qualcosina in più a proposito delle modiche as-is ed ero convinto che potesse funzionare ma purtroppo non funziona. application.rb è nella cartella controller. Grazie mille Luigi
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.