<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2italianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>DevInterface Blog</title>
	
	<link>http://blog.devinterface.com</link>
	<description>Information Technology Professionals</description>
	<lastBuildDate>Thu, 23 Feb 2012 08:55:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/devinterfaceblog/it" /><feedburner:info uri="devinterfaceblog/it" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>devinterfaceblog/it</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=it&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://eur.i1.yimg.com/eur.yimg.com/i/it/my/mioya1.gif">Subscribe with Mio Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/devinterfaceblog/it" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fdevinterfaceblog%2Fit" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Information Technology: è tempo di freelance e agenzie specializzate</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/KOybIlPDw0k/</link>
		<comments>http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 13:44:24 +0000</pubDate>
		<dc:creator>Twago Magazine</dc:creator>
				<category><![CDATA[Freelance]]></category>
		<category><![CDATA[Generale]]></category>
		<category><![CDATA[Svliluppo]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[twago]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1148</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Quello che segue è un guest post di Lorenzo Monfregola, content manager di Twago Italia.
Secondo gli ultimi dati presentati da twago, azienda leader nel settore del lavoro online, i professionisti dell’IT sono sempre più ricercati. Secondo il trend individuato i servizi basati su progetti online nel 2011 sono aumentati del 430%. Si tratta [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p><em>Quello che segue è un guest post di Lorenzo Monfregola, content manager di Twago Italia.</em></p>
<p>Secondo gli ultimi dati presentati da <a title="Twago" href="http://www.twago.it" target="_blank">twago, azienda leader</a> nel settore del lavoro online, i professionisti dell’IT sono sempre più ricercati. Secondo il trend individuato i servizi basati su progetti online nel 2011 sono aumentati del 430%. Si tratta di cifre che forse possono essere colte solo da chi conosce il veloce evolversi del web e dell’economia digitale. La domanda di professionisti nel mondo dell’IT si è moltiplicata di cinque volte nello scorso anno. In particolare ci riferiamo a progetti online portati avanti con collaborazioni in oustourcing presso <a title="Twago: Freelance" href="http://www.twago.it/expert/Freelance/Freelance" target="_blank">freelance o agenzie specializzate</a>. Se si vuole, infatti, individuare il passaggio centrale dell’evoluzione digitale dell’outsourcing bisogna considerare come, in pochi anni, l’esternalizzazione che un tempo potevano permettersi solo le Big Company, oggi è a portata di qualsiasi azienda. Se un tempo erano necessari investimenti anche solo per cercare un collaboratore esterno, oggi il web e le piattaforme di intermediazione online aprono ad ogni tipo di azienda l’esternalizzazione verso esperti specializzati. Questa è una svolta in particolare per l’Italia, in cui il ruolo delle piccole medie imprese resta centrale, soprattutto nel momento in cui evolvere il proprio profilo digitale (o crearlo da zero) significa un passo verso le nuove prospettive della web economy.</p>
<p>Dall&#8217;altro lato è la stessa economia del web a richiedere freelance o agenzie specializzate. Gli skills necessari per ciascuno dei settori dell’IT richiedono una tale formazione ed un costante aggiornamento che solo un freelance o un agenzia professionale possono offrire. Un’agenzia che si muove globalmente offrendo di volta in volta le proprie competenze ad aziende diverse è una realtà molto più produttiva della vecchia creazione ad hoc di dipartimenti IT interni all’azienda. E, come già scritto, questo è ancora più vero per quelle piccole realtà economiche che mai si sognerebbero di creare un proprio ufficio IT. Ecco che quindi il ruolo di un freelance con un proprio bagaglio di esperienze, o di un’agenzia che integra diverse competenze correlate tra loro, diventa fondamentale.</p>
<p><strong>Di quali competenze freelance stiamo parlando?</strong></p>
<p>Le differenti opzioni della <a title="Twago" href="http://www.twago.it/expert/Programmatore/Programmatore" target="_blank">programmazione (linguaggio Html, Java, Php)</a> e del Web design continuano ad essere le specificità più richieste dai servizi in outsourcing a livello globale. Altro campo in continua espansione è quello dei Content Management Systems, Wordpress e Joomla su tutti, a conferma della crescente importanza dell’offerta di contenuti di qualità online, anche a livello aziendale. Un discorso particoalre va poi fatto per il Mobile, la crescita di richiesta e progetti di Applicazioni, tanto iPhone e iPad quanto Android, è in crescita vertiginosa e va a segnare il veloce consolidamento di un’ennesima evoluzione dell’economia e della creatività digitale.<!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Del.icio.us" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to digg" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to reddit" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Technorati" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Stumble Upon" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Google Bookmarks" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Rojo" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to OKnotizie" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate&amp;url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Diggita" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;t=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to FaceBook" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Upnews" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Twitter" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate&amp;url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Technotizie" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate&amp;url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to FriendFeed" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/&amp;title=Information+Technology%3A+%C3%A8+tempo+di+freelance+e+agenzie+specializzate&amp;srcURL=http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Google Buzz" alt="Add 'Information Technology: è tempo di freelance e agenzie specializzate' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="<!--:en-->A new layout easier and more spacious<!--:--><!--:it-->Un nuovo layout più semplice e spazioso<!--:-->"><!--:en-->A new layout easier and more spacious<!--:--><!--:it-->Un nuovo layout più semplice e spazioso<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/04/spring-time-for-restyling/" title="<!--:en-->Spring, time for restyling<!--:--><!--:it-->Primavera, tempo di restyling<!--:-->"><!--:en-->Spring, time for restyling<!--:--><!--:it-->Primavera, tempo di restyling<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/aHAZJ_2fVQJzAayS5GtflJqKzhc/0/da"><img src="http://feedads.g.doubleclick.net/~a/aHAZJ_2fVQJzAayS5GtflJqKzhc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/aHAZJ_2fVQJzAayS5GtflJqKzhc/1/da"><img src="http://feedads.g.doubleclick.net/~a/aHAZJ_2fVQJzAayS5GtflJqKzhc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=KOybIlPDw0k:J4c4mkr8Ad0:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=KOybIlPDw0k:J4c4mkr8Ad0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=KOybIlPDw0k:J4c4mkr8Ad0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=KOybIlPDw0k:J4c4mkr8Ad0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=KOybIlPDw0k:J4c4mkr8Ad0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=KOybIlPDw0k:J4c4mkr8Ad0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/KOybIlPDw0k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/</feedburner:origLink></item>
		<item>
		<title>Inserire box di commento Disqus più volte nella stessa pagina</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/QWbQlZQfc9g/</link>
		<comments>http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 19:52:17 +0000</pubDate>
		<dc:creator>Claudio</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Svliluppo]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[disqus]]></category>
		<category><![CDATA[haml]]></category>
		<category><![CDATA[jqeury]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1132</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Ciao a tutti!

Per chi non lo conoscesse Disqus è una piattaforma che permette di inserire facilmente un box per i commenti su qualsiasi sito web, e consente agli utenti di utilizzare il loro account facebook o twitter (ma non solo) per autenticarsi.


Il limite di Disqus è che associa ogni thread di commenti ad [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Ciao a tutti!</p>
<p>
Per chi non lo conoscesse <a href="http://disqus.com/">Disqus</a> è una piattaforma che permette di inserire facilmente un box per i commenti su qualsiasi sito web, e consente agli utenti di utilizzare il loro account facebook o twitter (ma non solo) per autenticarsi.
</p>
<p>
Il limite di Disqus è che associa ogni thread di commenti ad un unica url.<br />
Di conseguenza, si aspetta che in ogni pagina ci sia solamente un box di commenti.
</p>
<p>
Nella stragrande maggioranza dei casi questo limite è accettabile, tuttavia, per alcune applicazioni è utile poter inserire più box di commento in un unica pagina. Si pensi ad esempio ad un blog dove si vuol dare la possibilità di commentare ogni singolo post direttamente dalla pagina principale dove sono elencati tutti i post uno sotto l&#8217;altro.
</p>
<p>
Quello che voglio mostrarvi oggi è un metodo per superare il limite di Disqus ed implementare in modo semplice <strong>una pagina con più box di commento</strong>, come nell&#8217;esempio del blog appena fatto.<br />
Sfruttando un <strong>iframe</strong> e <strong>jQuery</strong> renderemo inoltre i box dinamici.
</p>
<p>
Supponiamo di avere la nostra pagina index.html.haml come segue e di aver già creato il nostro account su Disqus:
</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#006600; font-weight:bold;">-</span> <span style="color:#0066ff; font-weight:bold;">@posts</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; = show_for post <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>s<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; = s.<span style="color:#9900CC;">attribute</span> <span style="color:#ff3333; font-weight:bold;">:title</span><br />
&nbsp; &nbsp; = s.<span style="color:#9900CC;">attribute</span> <span style="color:#ff3333; font-weight:bold;">:body</span></div></td></tr></tbody></table></div>
<p>
L&#8217;idea è quella di creare un iframe dinamicamente sotto ogni post e farlo visualizzare/nascondere tramite jQuery quando si clicca su un link &#8220;commenta&#8221;. </p>
<p>Come prima cosa quindi creiamo la pagina comments.html.haml che andremo a caricare nell&#8217;iframe.
</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#disqus_thread</span><br />
<br />
<span style="color:#006600; font-weight:bold;">%</span>noscript<br />
&nbsp; Please enable JavaScript to view the<br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span>a<span style="color:#006600; font-weight:bold;">&#123;</span>:href <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;http://disqus.com/?ref_noscript&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span> comments powered by Disqus.<br />
<br />
<span style="color:#006600; font-weight:bold;">%</span>a.<span style="color:#9900CC;">dsq</span><span style="color:#006600; font-weight:bold;">-</span>brlink<span style="color:#006600; font-weight:bold;">&#123;</span>:href <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;http://disqus.com&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; blog comments powered by<br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span>span.<span style="color:#9900CC;">logo</span><span style="color:#006600; font-weight:bold;">-</span>disqus Disqus<br />
<br />
<br />
<span style="color:#ff3333; font-weight:bold;">:javascript</span><br />
&nbsp; var disqus_shortname = <span style="color:#996600;">'devinterface-example'</span>;<br />
<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span>function<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; var dsq = document.<span style="color:#9900CC;">createElement</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'script'</span><span style="color:#006600; font-weight:bold;">&#41;</span>; dsq.<span style="color:#9900CC;">type</span> = <span style="color:#996600;">'text/javascript'</span>; dsq.<span style="color:#9900CC;">async</span> = <span style="color:#0000FF; font-weight:bold;">true</span>;<br />
&nbsp; &nbsp; &nbsp; dsq.<span style="color:#9900CC;">src</span> = <span style="color:#996600;">'http://'</span> <span style="color:#006600; font-weight:bold;">+</span> disqus_shortname <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'.disqus.com/embed.js'</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span>document.<span style="color:#9900CC;">getElementsByTagName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'head'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> document.<span style="color:#9900CC;">getElementsByTagName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'body'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">appendChild</span><span style="color:#006600; font-weight:bold;">&#40;</span>dsq<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<br />
&nbsp; function disqus_config<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; this.<span style="color:#9900CC;">callbacks</span>.<span style="color:#9900CC;">onReady</span> = <span style="color:#006600; font-weight:bold;">&#91;</span>function<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; var frameHeight = $<span style="color:#006600; font-weight:bold;">&#40;</span>document<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">height</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'iframe.comment_frame'</span>, top.<span style="color:#9900CC;">document</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">attr</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;height&quot;</span>, frameHeight<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
&nbsp; &nbsp; this.<span style="color:#9900CC;">callbacks</span>.<span style="color:#9900CC;">onNewComment</span> = <span style="color:#006600; font-weight:bold;">&#91;</span>function<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; var frameHeight = $<span style="color:#006600; font-weight:bold;">&#40;</span>document<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">height</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'iframe.comment_frame'</span>, top.<span style="color:#9900CC;">document</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">attr</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;height&quot;</span>, frameHeight<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>
In questa pagina inseriamo l&#8217;html ed il javascript fornitoci da Disqus e settiamo la variabile <em><strong>disqus_shortname</strong></em>.<br />
Utilizzando poi la funzione <em><strong>disqus_config</strong></em> impostiamo due callback per disqus in modo tale che dopo il completo caricamento di disqus o all&#8217;inserimento di un nuovo commento, l&#8217;iframe che contiene questa pagina venga ridimensionato opportunamente.<br />
NOTA: il ridimensionamento dell&#8217;iframe &#8220;contenitore&#8221; è possibile solo perchè le due pagine index e comments stanno sullo stesso dominio. Se cosi non fosse infatti, l&#8217;accesso al parent di un iframe sarebbe impossibile per i criteri di sicurezza dei browser.
</p>
<p>
Ora che abbiamo creato la nostra pagina comments, non ci resta che aggiungere alla index in modo dinamico l&#8217;iframe.<br />
Per rendere le cose più &#8220;carine&#8221; faremo in modo che il link di apertura/chiusura del box dei commenti contenga il conteggio dei commenti di quello specifico post.
</p>
<p>
Torniamo quindi alla pagina index e modifichiamola come segue:
</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#006600; font-weight:bold;">-</span> <span style="color:#0066ff; font-weight:bold;">@posts</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>post<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; = show_for post <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>s<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; = s.<span style="color:#9900CC;">attribute</span> <span style="color:#ff3333; font-weight:bold;">:title</span><br />
&nbsp; &nbsp; = s.<span style="color:#9900CC;">attribute</span> <span style="color:#ff3333; font-weight:bold;">:body</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">/</span> disqus comments<br />
&nbsp; &nbsp; = link_to <span style="color:#996600;">&quot;&quot;</span>, <span style="color:#996600;">&quot;/#{post.slug}/comments#disqus_thread&quot;</span>, :<span style="color:#9966CC; font-weight:bold;">class</span><span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;dq_comment&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> post.<span style="color:#9900CC;">id</span><br />
&nbsp; &nbsp; .<span style="color:#9900CC;">comment_box</span><span style="color:#006600; font-weight:bold;">&#123;</span>:id <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;comment_#{post.id}&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
<span style="color:#ff3333; font-weight:bold;">:javascript</span><br />
&nbsp; var disqus_shortname = <span style="color:#996600;">'devinterface-example'</span>;<br />
<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span>function <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; var s = document.<span style="color:#9900CC;">createElement</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'script'</span><span style="color:#006600; font-weight:bold;">&#41;</span>; s.<span style="color:#9900CC;">async</span> = <span style="color:#0000FF; font-weight:bold;">true</span>;<br />
&nbsp; &nbsp; &nbsp; s.<span style="color:#9900CC;">type</span> = <span style="color:#996600;">'text/javascript'</span>;<br />
&nbsp; &nbsp; &nbsp; s.<span style="color:#9900CC;">src</span> = <span style="color:#996600;">'http://'</span> <span style="color:#006600; font-weight:bold;">+</span> disqus_shortname <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'.disqus.com/count.js'</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span>document.<span style="color:#9900CC;">getElementsByTagName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'HEAD'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> document.<span style="color:#9900CC;">getElementsByTagName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'BODY'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">appendChild</span><span style="color:#006600; font-weight:bold;">&#40;</span>s<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<br />
&nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span>document<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">ready</span><span style="color:#006600; font-weight:bold;">&#40;</span>function<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.dq_comment&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">click</span><span style="color:#006600; font-weight:bold;">&#40;</span>function<span style="color:#006600; font-weight:bold;">&#40;</span>e<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color:#9900CC;">preventDefault</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; var id = $<span style="color:#006600; font-weight:bold;">&#40;</span>this<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">attr</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;id&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; var href = $<span style="color:#006600; font-weight:bold;">&#40;</span>this<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">attr</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;href&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; var src = href.<span style="color:#9900CC;">substring</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">0</span>,href.<span style="color:#9900CC;">length</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">14</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">//</span> Remove <span style="color:#008000; font-style:italic;">#disqus_thread</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>$<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#comment_&quot;</span><span style="color:#006600; font-weight:bold;">+</span>id<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">is</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">':visible'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#comment_&quot;</span><span style="color:#006600; font-weight:bold;">+</span>id<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">html</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#comment_&quot;</span><span style="color:#006600; font-weight:bold;">+</span>id<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">append</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'&lt;iframe scrolling=&quot;no&quot; frameborder=&quot;0&quot; src=&quot;'</span><span style="color:#006600; font-weight:bold;">+</span>src<span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">'&quot; class=&quot;comment_frame&quot;&gt;&lt;/iframe&gt;'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#comment_&quot;</span><span style="color:#006600; font-weight:bold;">+</span>id<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">toggle</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'slow'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>
Come vedete abbiamo aggiunto il link con una url univoca del post ed il tag <strong>#disqus_thread </strong>per attivare il counter dei commenti, come spiegato nella <a href="http://docs.disqus.com/developers/universal/" rel="nofollow">documentazione</a>.<br />
Infine tramite la funzione jQuery abbiamo intercettato il click sul link facendo in modo di creare dinamicamente sotto al post un iframe con l&#8217;url della nostra pagina comments.html.haml.<br />
Ovviamente l&#8217;url di comments dovra essere definita opportunamente nel nostro file di routes.
</p>
<p>
Ora non vi resta che aprire il vostro browser e vedere i vostri post, ognuno con il suo box di commenti caricato dinamicamente cliccando sul counter.
</p>
<p>
NB: se provate questi script in locale, ricordatevi di aggiungere nei due javascript di Disqus:
</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;<span style="color: #003366; font-weight: bold;">var</span> disqus_developer <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>
subito sotto a disqus_shortname.
</p>
<p><!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Del.icio.us" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to digg" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to reddit" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Technorati" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Stumble Upon" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Google Bookmarks" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Rojo" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to OKnotizie" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina&amp;url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Diggita" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;t=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to FaceBook" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Upnews" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Twitter" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina&amp;url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Technotizie" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina&amp;url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to FriendFeed" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/&amp;title=Inserire+box+di+commento+Disqus+pi%C3%B9+volte+nella+stessa+pagina&amp;srcURL=http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Google Buzz" alt="Add 'Inserire box di commento Disqus più volte nella stessa pagina' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="<!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:-->"><!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="<!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:-->"><!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="<!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:-->"><!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="<!--:en-->A new layout easier and more spacious<!--:--><!--:it-->Un nuovo layout più semplice e spazioso<!--:-->"><!--:en-->A new layout easier and more spacious<!--:--><!--:it-->Un nuovo layout più semplice e spazioso<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="<!--:en-->How to send email asynchronously using Devise and Rails3<!--:--><!--:it-->Come spedire email in modo asincrono con Devise e Rails3<!--:-->"><!--:en-->How to send email asynchronously using Devise and Rails3<!--:--><!--:it-->Come spedire email in modo asincrono con Devise e Rails3<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/kYLUOpbU0qVZerY1vhbcYhQnw7s/0/da"><img src="http://feedads.g.doubleclick.net/~a/kYLUOpbU0qVZerY1vhbcYhQnw7s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kYLUOpbU0qVZerY1vhbcYhQnw7s/1/da"><img src="http://feedads.g.doubleclick.net/~a/kYLUOpbU0qVZerY1vhbcYhQnw7s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=QWbQlZQfc9g:kiuJz3guxFQ:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=QWbQlZQfc9g:kiuJz3guxFQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=QWbQlZQfc9g:kiuJz3guxFQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=QWbQlZQfc9g:kiuJz3guxFQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=QWbQlZQfc9g:kiuJz3guxFQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=QWbQlZQfc9g:kiuJz3guxFQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/QWbQlZQfc9g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/</feedburner:origLink></item>
		<item>
		<title>Tips: Paginazione multipla con will_paginate</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/oVs8eDLksDE/</link>
		<comments>http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 13:07:10 +0000</pubDate>
		<dc:creator>Claudio</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[will_paginate]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1119</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)


Will Paginate è la gemma più utilizzata per la paginazione in Ruby on Rails.


Succede a volte di dover paginare più liste diverse su una stessa pagina.


Questo tip  mostra come è possibile visualizzare una lista paginata di prodotti ed una lista paginata di servizi su una stessa pagina utilizzando will_paginate.
Il punto chiave sta [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>
Will Paginate è la gemma più utilizzata per la paginazione in Ruby on Rails.
</p>
<p>
Succede a volte di dover <strong>paginare più liste diverse su una stessa pagina</strong>.
</p>
<p>
Questo <em>tip </em> mostra come è possibile visualizzare una lista paginata di prodotti ed una lista paginata di servizi su una stessa pagina utilizzando <a href="https://github.com/mislav/will_paginate">will_paginate</a>.<br />
Il punto chiave sta nell&#8217;utilizzare un parametro <em>param_name</em> personalizzato sia nella view che nel controller.
</p>
<p>Il codice della view sarà qualcosa di simile a questo:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># ...<br />
# la lista di prodotti va qui <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&lt;%</span>= will_paginate <span style="color:#0066ff; font-weight:bold;">@products</span>, <span style="color:#ff3333; font-weight:bold;">:param_name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'products_page'</span>, <span style="color:#ff3333; font-weight:bold;">:prev_label</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'helpers.labels.previous'</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#ff3333; font-weight:bold;">:next_label</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'helpers.labels.next'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span><br />
<br />
# la lista di servizi va qui <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&lt;%</span>= will_paginate <span style="color:#0066ff; font-weight:bold;">@services</span>, <span style="color:#ff3333; font-weight:bold;">:param_name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'services_page'</span>, <span style="color:#ff3333; font-weight:bold;">:prev_label</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'helpers.labels.previous'</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#ff3333; font-weight:bold;">:next_label</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'helpers.labels.next'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span><br />
# ...</div></td></tr></tbody></table></div>
<p>E questo invece sarà il codice del controller:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># ...</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> index<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@products</span> = current_company.<span style="color:#9900CC;">products</span>.<span style="color:#9900CC;">paginate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:page</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:products_page</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#ff3333; font-weight:bold;">:per_page</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">10</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@services</span> = current_company.<span style="color:#9900CC;">products</span>.<span style="color:#9900CC;">paginate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:page</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:services_page</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#ff3333; font-weight:bold;">:per_page</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">10</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#008000; font-style:italic;"># ...</span></div></td></tr></tbody></table></div>
<p><!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Del.icio.us" alt="Add 'Tips: Paginazione multipla con will_paginate' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Tips: Paginazione multipla con will_paginate' to digg" alt="Add 'Tips: Paginazione multipla con will_paginate' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Tips: Paginazione multipla con will_paginate' to reddit" alt="Add 'Tips: Paginazione multipla con will_paginate' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Technorati" alt="Add 'Tips: Paginazione multipla con will_paginate' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Stumble Upon" alt="Add 'Tips: Paginazione multipla con will_paginate' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Google Bookmarks" alt="Add 'Tips: Paginazione multipla con will_paginate' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Rojo" alt="Add 'Tips: Paginazione multipla con will_paginate' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Tips: Paginazione multipla con will_paginate' to OKnotizie" alt="Add 'Tips: Paginazione multipla con will_paginate' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Tips%3A+Paginazione+multipla+con+will_paginate&amp;url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Diggita" alt="Add 'Tips: Paginazione multipla con will_paginate' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;t=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Tips: Paginazione multipla con will_paginate' to FaceBook" alt="Add 'Tips: Paginazione multipla con will_paginate' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate" title="Add 'Tips: Paginazione multipla con will_paginate' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Upnews" alt="Add 'Tips: Paginazione multipla con will_paginate' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Twitter" alt="Add 'Tips: Paginazione multipla con will_paginate' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate&amp;url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Technotizie" alt="Add 'Tips: Paginazione multipla con will_paginate' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Tips%3A+Paginazione+multipla+con+will_paginate&amp;url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Tips: Paginazione multipla con will_paginate' to FriendFeed" alt="Add 'Tips: Paginazione multipla con will_paginate' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/&amp;title=Tips%3A+Paginazione+multipla+con+will_paginate&amp;srcURL=http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="Add 'Tips: Paginazione multipla con will_paginate' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Tips: Paginazione multipla con will_paginate' to Google Buzz" alt="Add 'Tips: Paginazione multipla con will_paginate' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="<!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:-->"><!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="<!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:-->"><!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/05/how-to-model-a-custom-search-form-in-rails/" title="<!--:en-->How to model a custom search form in Rails<!--:--><!--:it-->Come modellare una form di ricerca usando Rails<!--:-->"><!--:en-->How to model a custom search form in Rails<!--:--><!--:it-->Come modellare una form di ricerca usando Rails<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="<!--:en-->How to send email asynchronously using Devise and Rails3<!--:--><!--:it-->Come spedire email in modo asincrono con Devise e Rails3<!--:-->"><!--:en-->How to send email asynchronously using Devise and Rails3<!--:--><!--:it-->Come spedire email in modo asincrono con Devise e Rails3<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="<!--:en-->Ruby Enumerables: Operation on hashes<!--:--><!--:it-->Ruby Enumerables: Operazioni con le hash<!--:-->"><!--:en-->Ruby Enumerables: Operation on hashes<!--:--><!--:it-->Ruby Enumerables: Operazioni con le hash<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/WmPATnm7ym5leS-Lza9MgBNStm8/0/da"><img src="http://feedads.g.doubleclick.net/~a/WmPATnm7ym5leS-Lza9MgBNStm8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/WmPATnm7ym5leS-Lza9MgBNStm8/1/da"><img src="http://feedads.g.doubleclick.net/~a/WmPATnm7ym5leS-Lza9MgBNStm8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=oVs8eDLksDE:RlbGbMbZW4U:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=oVs8eDLksDE:RlbGbMbZW4U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=oVs8eDLksDE:RlbGbMbZW4U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=oVs8eDLksDE:RlbGbMbZW4U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=oVs8eDLksDE:RlbGbMbZW4U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=oVs8eDLksDE:RlbGbMbZW4U:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/oVs8eDLksDE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/</feedburner:origLink></item>
		<item>
		<title>Registrazione in due step con Devise</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/_qlTgWiCnH0/</link>
		<comments>http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/#comments</comments>
		<pubDate>Wed, 11 May 2011 20:28:04 +0000</pubDate>
		<dc:creator>Claudio</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Svliluppo]]></category>
		<category><![CDATA[customization]]></category>
		<category><![CDATA[devise]]></category>
		<category><![CDATA[haml]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[registration]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[signup]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1096</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Nei miei progetti in Ruby on Rails generalemente utilizzo Devise come gem per l&#8217;autenticazione degli utenti.
Nell&#8217;ultima applicazione sviluppata avevo necessità di personalizzare Devise in modo che gli utenti potessero registrarsi fornendo solo l&#8217;indirizzo email.
La password di accesso doveva essere impostata nello step di conferma dell&#8217;account.
Dopo alcuni test, sono giunto alla seguente soluzione.
1. Per [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Nei miei progetti in Ruby on Rails generalemente utilizzo <a href="https://github.com/plataformatec/devise">Devise</a> come gem per l&#8217;autenticazione degli utenti.</p>
<p>Nell&#8217;ultima applicazione sviluppata avevo necessità di personalizzare Devise in modo che gli utenti potessero registrarsi fornendo solo l&#8217;indirizzo email.<br />
La password di accesso doveva essere impostata nello step di conferma dell&#8217;account.<br />
Dopo alcuni test, sono giunto alla seguente soluzione.</p>
<p><strong>1.</strong> Per prima cosa ho dovuto sovrascrivere il ConfirmationsController. Quindi nel file routes.rb ho impostato devise perchè utilizzase il mio controller custom (il mio model degli utenti si chiamava Account).<br />
Ho dovuto sovrascrivere anche il RegistrationsController per personalizzare la pagina di registrazione:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; devise_for <span style="color:#ff3333; font-weight:bold;">:accounts</span>, <span style="color:#ff3333; font-weight:bold;">:controllers</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:confirmations <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;confirmations&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:registrations</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;registrations&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; put <span style="color:#996600;">&quot;confirm_account&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;confirmations#confirm_account&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>Come vedete ho anche aggiunto un metodo custom, <em>confirm_account</em> che userò nel quarto step, come vedremo tra poco.</p>
<p><strong>2.</strong> A questo punto devo fare in modo di evitare la validazione della password di devise.<br />
Per questo scopo ho scritto un initializer chiamato devise_customization.rb in <em>/config/initalizers/</em> come segue:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">module</span> Devise<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Models<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Validatable<br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> password_required?<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">false</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>In questo modo ho sovrascritto il modulo validatable di devise skippando la validazione della password.</p>
<p><strong>3.</strong> Il passo successivo è la personalizzazione delle view.<br />
Poichè utilizzo i miei ConfirmationsController e RegistrationsController custom ho copiato le view standard di devise sotto <em>/views/confirmations/</em> per le confirmations e sotto <em>/views/registrations/</em> per le registrations.<br />
Le ho poi modificate come segue per adattarle al mio workflow di registrazione.</p>
<p>La view <em>/registrations/new</em> è diventata cosi (utilizzo <a href="http://haml-lang.com/">haml</a> per i layout)</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">= form_for<span style="color:#006600; font-weight:bold;">&#40;</span>resource, <span style="color:#ff3333; font-weight:bold;">:as</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> resource_name, <span style="color:#ff3333; font-weight:bold;">:url</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> account_registration_path<span style="color:#006600; font-weight:bold;">&#40;</span>@account<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; = devise_error_messages! &nbsp; &nbsp; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:email</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">email_field</span> <span style="color:#ff3333; font-weight:bold;">:email</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">clearfix</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">submit</span> <span style="color:#996600;">'Signup'</span><br />
&nbsp; = link_to <span style="color:#996600;">'Home'</span>, root_url<br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span>br<span style="color:#006600; font-weight:bold;">/</span> <br />
&nbsp; = render <span style="color:#ff3333; font-weight:bold;">:partial</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'devise/shared/links'</span></div></td></tr></tbody></table></div>
<p>In questa view ho semplicemente rimosso i campi password e password_confirmation.</p>
<p>La view <em>/confirmations/show</em> è invece diventata:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">= form_for<span style="color:#006600; font-weight:bold;">&#40;</span>resource, <span style="color:#ff3333; font-weight:bold;">:url</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> confirm_account_path<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; = devise_error_messages! &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:email</span><br />
&nbsp; &nbsp; = <span style="color:#0066ff; font-weight:bold;">@account</span>.<span style="color:#9900CC;">email</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">hidden_field</span> <span style="color:#ff3333; font-weight:bold;">:confirmation_token</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:password</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">%</span>br<span style="color:#006600; font-weight:bold;">/</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">password_field</span> <span style="color:#ff3333; font-weight:bold;">:password</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:password_confirmation</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">%</span>br<span style="color:#006600; font-weight:bold;">/</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">password_field</span> <span style="color:#ff3333; font-weight:bold;">:password_confirmation</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">clearfix</span><br />
&nbsp; &nbsp; = f.<span style="color:#9900CC;">submit</span> <span style="color:#996600;">'Confirm Account'</span><br />
&nbsp; = link_to <span style="color:#996600;">'Home'</span>, root_url<br />
&nbsp; <span style="color:#006600; font-weight:bold;">%</span>br<span style="color:#006600; font-weight:bold;">/</span><br />
&nbsp; = render <span style="color:#ff3333; font-weight:bold;">:partial</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'devise/shared/links'</span></div></td></tr></tbody></table></div>
<p><strong>4.</strong> Ok, ora che ho definito le mie view è tempo di scrivere il nuovo metodo di conferma dell&#8217;account nel ConfirmationsController. Posso invece lasciare inalterato il RegistrationsController.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> ConfirmationsController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">Devise::ConfirmationsController</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> show<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@account</span> = Account.<span style="color:#9900CC;">find_by_confirmation_token</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:confirmation_token</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> !@account.<span style="color:#9900CC;">present</span>?<br />
&nbsp; &nbsp; &nbsp; render_with_scope <span style="color:#ff3333; font-weight:bold;">:new</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> confirm_account<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@account</span> = Account.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:account</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:confirmation_token</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@account</span>.<span style="color:#9900CC;">update_attributes</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:account</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">and</span> <span style="color:#0066ff; font-weight:bold;">@account</span>.<span style="color:#9900CC;">password_match</span>?<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@account</span> = Account.<span style="color:#9900CC;">confirm_by_token</span><span style="color:#006600; font-weight:bold;">&#40;</span>@account.<span style="color:#9900CC;">confirmation_token</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; set_flash_message <span style="color:#ff3333; font-weight:bold;">:notice</span>, <span style="color:#ff3333; font-weight:bold;">:confirmed</span> &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; sign_in_and_redirect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;account&quot;</span>, <span style="color:#0066ff; font-weight:bold;">@account</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; render <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;show&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>Il metodo show semplicemente si occupa di trovare l&#8217;account in base al token ricevuto e poi renderizzza la view show.<br />
Il punto chiave è il metodo <em>confirm_account</em> dove viene trovato l&#8217;account, eseguito l&#8217;update dei suoi attributes e se il metodo password_match? ritorna true allora l&#8217;account viene confermato chiamando il metodo standard di devise <em>confirm_by_token</em></p>
<p><strong>5.</strong> L&#8217;ultima cosa che rimane da fare è definire il metodo password_match? all&#8217;interno del model Account.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> Account <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
...<br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> password_match?<br />
&nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">errors</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:password</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">'password not match'</span> <span style="color:#9966CC; font-weight:bold;">if</span> password != password_confirmation<br />
&nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">errors</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:password</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">'you must provide a password'</span> <span style="color:#9966CC; font-weight:bold;">if</span> password.<span style="color:#9900CC;">blank</span>?<br />
&nbsp; &nbsp; password == password_confirmation <span style="color:#9966CC; font-weight:bold;">and</span> !password.<span style="color:#9900CC;">blank</span>?<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p><strong>E questo è tutto!</strong><br />
Ora potete riavviare il server rails e registrarvi nella vostra applicazione scegliendo la password solo in fase di conferma dell&#8217;account.<br />
<!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Registrazione in due step con Devise' to Del.icio.us" alt="Add 'Registrazione in due step con Devise' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Registrazione in due step con Devise' to digg" alt="Add 'Registrazione in due step con Devise' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Registrazione in due step con Devise' to reddit" alt="Add 'Registrazione in due step con Devise' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Registrazione in due step con Devise' to Technorati" alt="Add 'Registrazione in due step con Devise' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Registrazione in due step con Devise' to Stumble Upon" alt="Add 'Registrazione in due step con Devise' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Registrazione in due step con Devise' to Google Bookmarks" alt="Add 'Registrazione in due step con Devise' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Registrazione in due step con Devise' to Rojo" alt="Add 'Registrazione in due step con Devise' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Registrazione in due step con Devise' to OKnotizie" alt="Add 'Registrazione in due step con Devise' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Registrazione+in+due+step+con+Devise&amp;url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Registrazione in due step con Devise' to Diggita" alt="Add 'Registrazione in due step con Devise' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;t=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Registrazione in due step con Devise' to FaceBook" alt="Add 'Registrazione in due step con Devise' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise" title="Add 'Registrazione in due step con Devise' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Registrazione in due step con Devise' to Upnews" alt="Add 'Registrazione in due step con Devise' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Registrazione in due step con Devise' to Twitter" alt="Add 'Registrazione in due step con Devise' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Registrazione+in+due+step+con+Devise&amp;url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Registrazione in due step con Devise' to Technotizie" alt="Add 'Registrazione in due step con Devise' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Registrazione+in+due+step+con+Devise&amp;url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Registrazione in due step con Devise' to FriendFeed" alt="Add 'Registrazione in due step con Devise' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/&amp;title=Registrazione+in+due+step+con+Devise&amp;srcURL=http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="Add 'Registrazione in due step con Devise' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Registrazione in due step con Devise' to Google Buzz" alt="Add 'Registrazione in due step con Devise' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="<!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:-->"><!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="<!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:-->"><!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="<!--:en-->How to send email asynchronously using Devise and Rails3<!--:--><!--:it-->Come spedire email in modo asincrono con Devise e Rails3<!--:-->"><!--:en-->How to send email asynchronously using Devise and Rails3<!--:--><!--:it-->Come spedire email in modo asincrono con Devise e Rails3<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/05/how-to-model-a-custom-search-form-in-rails/" title="<!--:en-->How to model a custom search form in Rails<!--:--><!--:it-->Come modellare una form di ricerca usando Rails<!--:-->"><!--:en-->How to model a custom search form in Rails<!--:--><!--:it-->Come modellare una form di ricerca usando Rails<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="<!--:en-->How to insert more Disqus comments box in a single page<!--:--><!--:it-->Inserire box di commento Disqus più volte nella stessa pagina<!--:-->"><!--:en-->How to insert more Disqus comments box in a single page<!--:--><!--:it-->Inserire box di commento Disqus più volte nella stessa pagina<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/vrknaSp8XS2yBiVczCUZNQa3rFQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/vrknaSp8XS2yBiVczCUZNQa3rFQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vrknaSp8XS2yBiVczCUZNQa3rFQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/vrknaSp8XS2yBiVczCUZNQa3rFQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=_qlTgWiCnH0:D2o86irTeLQ:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=_qlTgWiCnH0:D2o86irTeLQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=_qlTgWiCnH0:D2o86irTeLQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=_qlTgWiCnH0:D2o86irTeLQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=_qlTgWiCnH0:D2o86irTeLQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=_qlTgWiCnH0:D2o86irTeLQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/_qlTgWiCnH0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/</feedburner:origLink></item>
		<item>
		<title>Lancio del portale Gruppi Emergenti</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/C7tSaI3ptcY/</link>
		<comments>http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 12:56:41 +0000</pubDate>
		<dc:creator>DevInterface</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Gruppi Emergenti]]></category>
		<category><![CDATA[rilascio]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1084</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Siamo prossimi alla pubblicazione online di Gruppi Emergenti,  il nuovo portale della musica emergente italiana che si propone come  vetrina per le band, gli artisti ed i locali di musica dal vivo.
Il sito web, completamente gratuito, permette di creare la pagina  della propria band o del proprio live club e [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Siamo prossimi alla pubblicazione online di <a title="Gruppi Emergenti" href="http://www.gruppiemergenti.net/" target="_blank">Gruppi Emergenti</a>,  il nuovo portale della musica emergente italiana che si propone come  vetrina per le band, gli artisti ed i locali di musica dal vivo.</p>
<p>Il sito web, completamente gratuito, permette di creare la pagina  della propria band o del proprio live club e di pubblicare eventi  musicali.</p>
<p>Tramite una ricerca localizzata su Gruppi Emergenti è possibile  cercare tutti gli eventi (esibizioni, concerti e quant&#8217;altro) che si  terranno in un determinato periodo ed in una determinata zona.</p>
<p>L&#8217;integrazione con le mappe di Google permette di localizzare anche visivamente i live club e gli eventi.</p>
<p>Gli utenti registrati possono ricevere ogni settimana l&#8217;elenco degli  eventi in programma relativi ai loro gruppi o locali preferiti tramite  una newsletter personalizzata.</p>
<p>Il portale è dotato anche di una bacheca per gli annunci relativi a strumenti, musicisti e corsi.</p>
<p>Gruppi Emergenti è integrato anche con i principali social network e  consente di pubblicare gli eventi creati sul sito direttamente sui  profili e sulle pagine di Facebook e Twitter.</p>
<p>Il lancio ufficiale è previsto per <strong>mercoledi 20 aprile</strong>.</p>
<p>Tutti gli utenti iscritti nella fase di presentazione del sito durata  dal 1 marzo ad oggi 15 aprile <strong>riceveranno al loro indirizzo email le  credenziali per accedere subito dopo la pubblicazione</strong>.</p>
<p style="text-align: left;">Inoltre, tra di loro abbiamo sorteggiato<strong> 4 vincitori di due mesi di pubblicità gratuita</strong> sul portale.</p>
<p>L&#8217;elenco dei vincitori lo potete vedere nell&#8217;immagine riportata qui sotto.</p>
<p style="text-align: center;"><img class="size-full wp-image-1085  aligncenter" title="Winners" src="http://blog.devinterface.com/wp-content/uploads/2011/04/Winners.jpg" alt="" width="432" height="318" /></p>
<p><strong>I vincitori saranno contattati via email nelle prossime ore con tutti i dettagli per la pubblicazione dei banner.</strong><!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Lancio del portale Gruppi Emergenti' to Del.icio.us" alt="Add 'Lancio del portale Gruppi Emergenti' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Lancio del portale Gruppi Emergenti' to digg" alt="Add 'Lancio del portale Gruppi Emergenti' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Lancio del portale Gruppi Emergenti' to reddit" alt="Add 'Lancio del portale Gruppi Emergenti' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Lancio del portale Gruppi Emergenti' to Technorati" alt="Add 'Lancio del portale Gruppi Emergenti' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Lancio del portale Gruppi Emergenti' to Stumble Upon" alt="Add 'Lancio del portale Gruppi Emergenti' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Lancio del portale Gruppi Emergenti' to Google Bookmarks" alt="Add 'Lancio del portale Gruppi Emergenti' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Lancio del portale Gruppi Emergenti' to Rojo" alt="Add 'Lancio del portale Gruppi Emergenti' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Lancio del portale Gruppi Emergenti' to OKnotizie" alt="Add 'Lancio del portale Gruppi Emergenti' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Lancio+del+portale+Gruppi+Emergenti&amp;url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Lancio del portale Gruppi Emergenti' to Diggita" alt="Add 'Lancio del portale Gruppi Emergenti' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;t=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Lancio del portale Gruppi Emergenti' to FaceBook" alt="Add 'Lancio del portale Gruppi Emergenti' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti" title="Add 'Lancio del portale Gruppi Emergenti' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Lancio del portale Gruppi Emergenti' to Upnews" alt="Add 'Lancio del portale Gruppi Emergenti' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Lancio del portale Gruppi Emergenti' to Twitter" alt="Add 'Lancio del portale Gruppi Emergenti' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Lancio+del+portale+Gruppi+Emergenti&amp;url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Lancio del portale Gruppi Emergenti' to Technotizie" alt="Add 'Lancio del portale Gruppi Emergenti' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Lancio+del+portale+Gruppi+Emergenti&amp;url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Lancio del portale Gruppi Emergenti' to FriendFeed" alt="Add 'Lancio del portale Gruppi Emergenti' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/&amp;title=Lancio+del+portale+Gruppi+Emergenti&amp;srcURL=http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/" title="Add 'Lancio del portale Gruppi Emergenti' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Lancio del portale Gruppi Emergenti' to Google Buzz" alt="Add 'Lancio del portale Gruppi Emergenti' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Random Posts</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2010/05/how-to-model-a-custom-search-form-in-rails/" title="<!--:en-->How to model a custom search form in Rails<!--:--><!--:it-->Come modellare una form di ricerca usando Rails<!--:-->"><!--:en-->How to model a custom search form in Rails<!--:--><!--:it-->Come modellare una form di ricerca usando Rails<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2009/10/how-to-implement-a-viewing-system-in-rails/" title="<!--:en-->How to implement a viewing system in Rails<!--:--><!--:it-->Implementare un contatore di visite in Rails<!--:-->"><!--:en-->How to implement a viewing system in Rails<!--:--><!--:it-->Implementare un contatore di visite in Rails<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2009/11/linq-from-xml-to-c-classes/" title="<!--:en-->LINQ: from xml to C# classes<!--:--><!--:it-->LINQ: da xml a classi C#<!--:-->"><!--:en-->LINQ: from xml to C# classes<!--:--><!--:it-->LINQ: da xml a classi C#<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2009/10/system-information-application-for-nodia-s60v5-phones/" title="<!--:en-->System Information application for Nokia S60v5 phones<!--:--><!--:it-->Applicazione System Information per telefoni Nokia S60v5<!--:-->"><!--:en-->System Information application for Nokia S60v5 phones<!--:--><!--:it-->Applicazione System Information per telefoni Nokia S60v5<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/06/rails-best-practices-2-move-logic-to-model/" title="<!--:en-->Rails Best Practices 2: Move logic to model<!--:--><!--:it-->Rails Best Practices 2: Spostare la logica nel model<!--:-->"><!--:en-->Rails Best Practices 2: Move logic to model<!--:--><!--:it-->Rails Best Practices 2: Spostare la logica nel model<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/E91Fzmuebpv4QttDpNa06E9BGHg/0/da"><img src="http://feedads.g.doubleclick.net/~a/E91Fzmuebpv4QttDpNa06E9BGHg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/E91Fzmuebpv4QttDpNa06E9BGHg/1/da"><img src="http://feedads.g.doubleclick.net/~a/E91Fzmuebpv4QttDpNa06E9BGHg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=C7tSaI3ptcY:rUtguV5IoPY:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=C7tSaI3ptcY:rUtguV5IoPY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=C7tSaI3ptcY:rUtguV5IoPY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=C7tSaI3ptcY:rUtguV5IoPY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=C7tSaI3ptcY:rUtguV5IoPY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=C7tSaI3ptcY:rUtguV5IoPY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/C7tSaI3ptcY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/04/we-area-launching-gruppi-emergenti/</feedburner:origLink></item>
		<item>
		<title>Prevenire la registrazione di login riservate</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/p3f-ssvr6I4/</link>
		<comments>http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 08:34:47 +0000</pubDate>
		<dc:creator>Claudio</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Svliluppo]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[login reservation]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1074</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Ogni volta che si realizza una web application dove gli utenti possono registrarsi, è buona cosa escludere alcuni username o login in modo che non possano essere utilizzati.
Un esempio classico è la login &#8220;admin&#8221;.
Credo che nessuno desideri che sulla sua applicazione ci sia un utente iscritto con lo username &#8220;admin&#8221; che possa magari [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Ogni volta che si realizza una web application dove gli utenti possono registrarsi, è buona cosa escludere alcuni username o login in modo che non possano essere utilizzati.<br />
Un esempio classico è la login &#8220;admin&#8221;.<br />
Credo che nessuno desideri che sulla sua applicazione ci sia un utente iscritto con lo username &#8220;admin&#8221; che possa magari contattare gli altri utenti spacciandosi per il vero amministratore del sito.<br />
La stessa cosa può valere per lo username &#8220;root&#8221; e per molti altri.</p>
<p>E&#8217; quindi necessario definire una <strong>lista di nomi riservati</strong>.<br />
Fortunatamente sviluppando in Ruby on Rails è molto semplice implementare questa funzionalità sfruttando il validatore <strong>validates_exclusion_of</strong> se si utilizza Rails fino alla versione 2.3.8</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; validates_exclusion_of <span style="color:#ff3333; font-weight:bold;">:login</span>, <br />
&nbsp; &nbsp; :<span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;admin&quot;</span>, <span style="color:#996600;">&quot;root&quot;</span>, <span style="color:#996600;">&quot;administrator&quot;</span>, <span style="color:#996600;">&quot;superuser&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <br />
&nbsp; &nbsp; <span style="color:#ff3333; font-weight:bold;">:message</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;is reserved&quot;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>oppure utilizzando <strong>validates</strong> con il parametro <strong>:exclusion</strong> se si utilizza Rails 3.x</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
validates <span style="color:#ff3333; font-weight:bold;">:login</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#ff3333; font-weight:bold;">:exclusion</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:<span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;admin&quot;</span>, <span style="color:#996600;">&quot;root&quot;</span>, <span style="color:#996600;">&quot;administrator&quot;</span>, <span style="color:#996600;">&quot;superuser&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#ff3333; font-weight:bold;">:message</span> &nbsp;<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;is reserved&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>In questo modo, chiunque tenti di creare un account con login &#8220;admin&#8221; ottiene un messaggio di errore che indica che il nome è riservato.<br />
Va però tenuto presente che <strong>validates_exclusion_of</strong> e anche <strong>validates :exclusion</strong> sono metodi <strong>case sensitive</strong>.<br />
Ciò significa che con questa prima implementazione un utente che provi a registrarsi come &#8220;Admin&#8221; avrà successo.</p>
<p>Per ovviare anche a questo problema la cosa più semplice da fare è aggiungere un <strong>before_filter</strong> prima delle validazioni che converta la login inserita in lettere minuscole.<br />
Ecco quindi la soluzione completa per Rails 2.3.x:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; <br />
&nbsp; before_validation <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>u<span style="color:#006600; font-weight:bold;">|</span> u.<span style="color:#9900CC;">login</span>.<span style="color:#9900CC;">downcase</span>! <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; <br />
&nbsp; validates_exclusion_of <span style="color:#ff3333; font-weight:bold;">:login</span>, <br />
&nbsp; &nbsp; :<span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;admin&quot;</span>, <span style="color:#996600;">&quot;root&quot;</span>, <span style="color:#996600;">&quot;administrator&quot;</span>, <span style="color:#996600;">&quot;superuser&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <br />
&nbsp; &nbsp; <span style="color:#ff3333; font-weight:bold;">:message</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;is reserved&quot;</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>e l&#8217;equivalente soluzione per Rails 3:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
<br />
&nbsp; before_validation <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>u<span style="color:#006600; font-weight:bold;">|</span> u.<span style="color:#9900CC;">login</span>.<span style="color:#9900CC;">downcase</span>! <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; <br />
&nbsp; validates <span style="color:#ff3333; font-weight:bold;">:login</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#ff3333; font-weight:bold;">:exclusion</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:<span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;admin&quot;</span>, <span style="color:#996600;">&quot;root&quot;</span>, <span style="color:#996600;">&quot;administrator&quot;</span>, <span style="color:#996600;">&quot;superuser&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#ff3333; font-weight:bold;">:message</span> &nbsp;<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;is reserved&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>Questo metodo ha però lo svantaggio di convertire tutte le login in lettere minuscole non permettendo di fatto la registrazione di due login &#8220;uguali&#8221; ma con case diverso.<br />
Soluzione che può essere accettabile in molti casi.<br />
Tuttavia se si ha necessità di <strong>preservare la login con maiuscole e minuscole</strong> come viene inserita dagli utenti si può sempre implementare un metodo di validazione custom:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; validate <span style="color:#ff3333; font-weight:bold;">:excluded_login</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> excluded_login<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#40;</span> admin root administrator superuser <span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>reserved_login<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; user.<span style="color:#9900CC;">errors</span>.<span style="color:#9900CC;">add</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:login</span>, <span style="color:#996600;">&quot;is reserved&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">if</span> user.<span style="color:#9900CC;">login</span>.<span style="color:#9900CC;">downcase</span> == reserved_login<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>Avete mai implementato una soluzione di questo genere? Conoscete un modo migliore di realizzarla?<br />
<!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Prevenire la registrazione di login riservate' to Del.icio.us" alt="Add 'Prevenire la registrazione di login riservate' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Prevenire la registrazione di login riservate' to digg" alt="Add 'Prevenire la registrazione di login riservate' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Prevenire la registrazione di login riservate' to reddit" alt="Add 'Prevenire la registrazione di login riservate' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Prevenire la registrazione di login riservate' to Technorati" alt="Add 'Prevenire la registrazione di login riservate' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Prevenire la registrazione di login riservate' to Stumble Upon" alt="Add 'Prevenire la registrazione di login riservate' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Prevenire la registrazione di login riservate' to Google Bookmarks" alt="Add 'Prevenire la registrazione di login riservate' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Prevenire la registrazione di login riservate' to Rojo" alt="Add 'Prevenire la registrazione di login riservate' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Prevenire la registrazione di login riservate' to OKnotizie" alt="Add 'Prevenire la registrazione di login riservate' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Prevenire+la+registrazione+di+login+riservate&amp;url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Prevenire la registrazione di login riservate' to Diggita" alt="Add 'Prevenire la registrazione di login riservate' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;t=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Prevenire la registrazione di login riservate' to FaceBook" alt="Add 'Prevenire la registrazione di login riservate' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate" title="Add 'Prevenire la registrazione di login riservate' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Prevenire la registrazione di login riservate' to Upnews" alt="Add 'Prevenire la registrazione di login riservate' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Prevenire la registrazione di login riservate' to Twitter" alt="Add 'Prevenire la registrazione di login riservate' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Prevenire+la+registrazione+di+login+riservate&amp;url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Prevenire la registrazione di login riservate' to Technotizie" alt="Add 'Prevenire la registrazione di login riservate' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Prevenire+la+registrazione+di+login+riservate&amp;url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Prevenire la registrazione di login riservate' to FriendFeed" alt="Add 'Prevenire la registrazione di login riservate' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/&amp;title=Prevenire+la+registrazione+di+login+riservate&amp;srcURL=http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="Add 'Prevenire la registrazione di login riservate' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Prevenire la registrazione di login riservate' to Google Buzz" alt="Add 'Prevenire la registrazione di login riservate' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="<!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:-->"><!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="<!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:-->"><!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/09/rails-best-practices-6-filters-and-helpers-file/" title="<!--:en-->Rails Best Practices 6: Filters and helpers file<!--:--><!--:it-->Rails Best Practices 6: Filtri e file helper<!--:-->"><!--:en-->Rails Best Practices 6: Filters and helpers file<!--:--><!--:it-->Rails Best Practices 6: Filtri e file helper<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/06/rails-best-practices-introduction/" title="<!--:en-->Rails Best Practices: introduction<!--:--><!--:it-->Rails Best Practices: introduzione<!--:-->"><!--:en-->Rails Best Practices: introduction<!--:--><!--:it-->Rails Best Practices: introduzione<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/06/partial-validation-in-rails/" title="<!--:en-->Partial Validation in Rails<!--:--><!--:it-->Validazione Parziale in Rails<!--:-->"><!--:en-->Partial Validation in Rails<!--:--><!--:it-->Validazione Parziale in Rails<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/86QwphFEot-ZmuBeISMRB7sWJYo/0/da"><img src="http://feedads.g.doubleclick.net/~a/86QwphFEot-ZmuBeISMRB7sWJYo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/86QwphFEot-ZmuBeISMRB7sWJYo/1/da"><img src="http://feedads.g.doubleclick.net/~a/86QwphFEot-ZmuBeISMRB7sWJYo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=p3f-ssvr6I4:tApfZmSkuVo:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=p3f-ssvr6I4:tApfZmSkuVo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=p3f-ssvr6I4:tApfZmSkuVo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=p3f-ssvr6I4:tApfZmSkuVo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=p3f-ssvr6I4:tApfZmSkuVo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=p3f-ssvr6I4:tApfZmSkuVo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/p3f-ssvr6I4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/</feedburner:origLink></item>
		<item>
		<title>Un nuovo layout più semplice e spazioso</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/peI7YTFGrII/</link>
		<comments>http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 12:56:09 +0000</pubDate>
		<dc:creator>DevInterface</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Verso DevInterface]]></category>
		<category><![CDATA[DevInterface]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[restyling]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1067</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Negli ultimi giorni abbiamo dedicato un po&#8217; del nostro tempo per fare un completo redesign del nostro sito e del nostro blog.
Il risultato è quello che stai vedendo leggendo questo articolo.
In particolare le novità che abbiamo introdotto sia nel tema del blog che nel sito sono:

Layout più largo e suddiviso in 2 colonne [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Negli ultimi giorni abbiamo dedicato un po&#8217; del nostro tempo per fare un completo redesign del <a title="DevInterface" href="http://www.devinterface.com">nostro sito</a> e del <a title="DevInterface Blog" href="http:/blog.devinterface.com">nostro blog.</a></p>
<p>Il risultato è quello che stai vedendo leggendo questo articolo.</p>
<p>In particolare le novità che abbiamo introdotto sia nel tema del blog che nel sito sono:</p>
<ul>
<li>Layout più largo e suddiviso in 2 colonne anche per il sito web</li>
<li>Contenuti del blog con più spazio, molto utile dove si riportano spezzoni di codice</li>
<li>Un header ampio e lineare con in ogni pagina i punti chiave</li>
<li>Un footer più ampio con tutti i nostri riferimenti e gli ultimi messaggi provenienti da Twitter (sul sito anche gli ultimi post del blog)</li>
<li>Uno slider sulla homepage del sito e del blog che riassume visivamente ciò di cui ci occupiamo (almeno in parte)</li>
<li>Pagina &#8220;portfolio&#8221; completamente ridisegnata</li>
<li>Pagina &#8220;chi siamo&#8221; con un look più dinamico</li>
</ul>
<p>Dal punto di vista tecnico il sito è stato riscritto utilizzando Ruby On Rails 3.0.5 e jQuery mentre il motore del blog rimane sempre il solito collaudato Wordpress.</p>
<p>Ti piace la nuova grafica? Siamo in attesa dei tuoi commenti!<!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Un nuovo layout più semplice e spazioso' to Del.icio.us" alt="Add 'Un nuovo layout più semplice e spazioso' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Un nuovo layout più semplice e spazioso' to digg" alt="Add 'Un nuovo layout più semplice e spazioso' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Un nuovo layout più semplice e spazioso' to reddit" alt="Add 'Un nuovo layout più semplice e spazioso' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Un nuovo layout più semplice e spazioso' to Technorati" alt="Add 'Un nuovo layout più semplice e spazioso' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Un nuovo layout più semplice e spazioso' to Stumble Upon" alt="Add 'Un nuovo layout più semplice e spazioso' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Un nuovo layout più semplice e spazioso' to Google Bookmarks" alt="Add 'Un nuovo layout più semplice e spazioso' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Un nuovo layout più semplice e spazioso' to Rojo" alt="Add 'Un nuovo layout più semplice e spazioso' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Un nuovo layout più semplice e spazioso' to OKnotizie" alt="Add 'Un nuovo layout più semplice e spazioso' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso&amp;url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Un nuovo layout più semplice e spazioso' to Diggita" alt="Add 'Un nuovo layout più semplice e spazioso' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;t=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Un nuovo layout più semplice e spazioso' to FaceBook" alt="Add 'Un nuovo layout più semplice e spazioso' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso" title="Add 'Un nuovo layout più semplice e spazioso' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Un nuovo layout più semplice e spazioso' to Upnews" alt="Add 'Un nuovo layout più semplice e spazioso' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Un nuovo layout più semplice e spazioso' to Twitter" alt="Add 'Un nuovo layout più semplice e spazioso' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso&amp;url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Un nuovo layout più semplice e spazioso' to Technotizie" alt="Add 'Un nuovo layout più semplice e spazioso' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso&amp;url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Un nuovo layout più semplice e spazioso' to FriendFeed" alt="Add 'Un nuovo layout più semplice e spazioso' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/&amp;title=Un+nuovo+layout+pi%C3%B9+semplice+e+spazioso&amp;srcURL=http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="Add 'Un nuovo layout più semplice e spazioso' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Un nuovo layout più semplice e spazioso' to Google Buzz" alt="Add 'Un nuovo layout più semplice e spazioso' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2010/12/ruby-on-rails-and-jquery-multiselect-with-checkbox/" title="<!--:en-->Ruby on Rails and jQuery: multiselect with checkbox<!--:--><!--:it-->Ruby on Rails e jQuery: multiselect con checkbox<!--:-->"><!--:en-->Ruby on Rails and jQuery: multiselect with checkbox<!--:--><!--:it-->Ruby on Rails e jQuery: multiselect con checkbox<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2012/02/italiano-information-technology-e-tempo-di-freelance-e-agenzie-specializzate/" title="<!--:en-->Information Technology: Now is the time for freelancers and specialised agencies<!--:--><!--:it-->Information Technology: è tempo di freelance e agenzie specializzate<!--:-->"><!--:en-->Information Technology: Now is the time for freelancers and specialised agencies<!--:--><!--:it-->Information Technology: è tempo di freelance e agenzie specializzate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2012/01/how-to-insert-more-disqus-box-in-single-page/" title="<!--:en-->How to insert more Disqus comments box in a single page<!--:--><!--:it-->Inserire box di commento Disqus più volte nella stessa pagina<!--:-->"><!--:en-->How to insert more Disqus comments box in a single page<!--:--><!--:it-->Inserire box di commento Disqus più volte nella stessa pagina<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="<!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:-->"><!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="<!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:-->"><!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/Tj0NbdJGXPdLj075jZNZ-qbdaMg/0/da"><img src="http://feedads.g.doubleclick.net/~a/Tj0NbdJGXPdLj075jZNZ-qbdaMg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Tj0NbdJGXPdLj075jZNZ-qbdaMg/1/da"><img src="http://feedads.g.doubleclick.net/~a/Tj0NbdJGXPdLj075jZNZ-qbdaMg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=peI7YTFGrII:BvyT7B1SMSA:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=peI7YTFGrII:BvyT7B1SMSA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=peI7YTFGrII:BvyT7B1SMSA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=peI7YTFGrII:BvyT7B1SMSA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=peI7YTFGrII:BvyT7B1SMSA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=peI7YTFGrII:BvyT7B1SMSA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/peI7YTFGrII" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/</feedburner:origLink></item>
		<item>
		<title>Come spedire email in modo asincrono con Devise e Rails3</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/ABXSyQ1dehY/</link>
		<comments>http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 14:47:16 +0000</pubDate>
		<dc:creator>Stefano</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Svliluppo]]></category>
		<category><![CDATA[asynchronous]]></category>
		<category><![CDATA[delayed_job]]></category>
		<category><![CDATA[devise]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rails3]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1057</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
	

(Powered by LaunchBit)
	
Ciao a tutti.

	Vorrei mostrare un workaround per inviare email in modo asincrono usando Devise e Rails3.

	Supponiamo di avere gi&#224; in piedi la nostra applicazione, con Devise e delayed_job installati correttamente.

	Un primo tentativo &#232; stato quello di aggiungere in config/initializers il seguente file devise_async.rb:

	12345678910111213141516#devise_async.rb
module Devise
&#160; module Models
&#160; &#160; module Confirmable
&#160; &#160; &#160; handle_asynchronously :send_confirmation_instructions
&#160; [...]]]></description>
			<content:encoded><![CDATA[	<p><p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small></p>
	<p></p><br />
Ciao a tutti.</p>

	<p>Vorrei mostrare un workaround per inviare email in modo asincrono usando Devise e Rails3.</p>

	<p>Supponiamo di avere gi&#224; in piedi la nostra applicazione, con <a href="https://github.com/plataformatec/devise" title="">Devise</a> e <a href="https://github.com/collectiveidea/delayed_job/tree/v3.0" title="">delayed_job</a> installati correttamente.</p>

	<p>Un primo tentativo &#232; stato quello di aggiungere in config/initializers il seguente file devise_async.rb:</p>

	<p><div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#devise_async.rb</span><br />
<span style="color:#9966CC; font-weight:bold;">module</span> Devise<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Models<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Confirmable<br />
&nbsp; &nbsp; &nbsp; handle_asynchronously <span style="color:#ff3333; font-weight:bold;">:send_confirmation_instructions</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Recoverable<br />
&nbsp; &nbsp; &nbsp; handle_asynchronously <span style="color:#ff3333; font-weight:bold;">:send_reset_password_instructions</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Lockable<br />
&nbsp; &nbsp; &nbsp; handle_asynchronously <span style="color:#ff3333; font-weight:bold;">:send_unlock_instructions</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div></p>

	<p>Questo workaround ha funzionato parzialmente: ha messo in coda correttamente l&#8217;invio della mail di confirmation nella tabella di delayed_job ma il problema si &#232; poi rivelato al momento dell&#8217;attivazione del job, ottenendo questo errore:</p>

	<p><div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">User#</span>send_confirmation_instructions_without_delay failed with NoMethodError: undefined method <span style="color: #ff0000;">'send_confirmation_instructions_without_delay'</span> <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #666666; font-style: italic;">#&lt;User:0x000000032f87c8&gt; - 1 failed attempts</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>Worker<span style="color: #7a0874; font-weight: bold;">&#40;</span>host:stefano-desktop pid:<span style="color: #000000;">13153</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></div></td></tr></tbody></table></div></p>

	<p>Come si puo&#8217; notare, il job sta tentando di chiamare il metodo sbagliato di invio istruzioni, send_confirmation_instructions_without_delay.</p>


	<p>A questo punto ho implementato un hack ancora pi&#249; sporco, overridando i metodi in questione e seguendo la sintassi indicata da intridea per inviare le email in background:</p>

	<p><div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#devise_async.rb</span><br />
<span style="color:#9966CC; font-weight:bold;">module</span> Devise<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Models<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Confirmable<br />
&nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Send confirmation instructions by email</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> send_confirmation_instructions<br />
&nbsp; &nbsp; &nbsp; &nbsp; generate_confirmation_token! <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">confirmation_token</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; &nbsp; ::Devise.<span style="color:#9900CC;">mailer</span>.<span style="color:#9900CC;">delay</span>.<span style="color:#9900CC;">confirmation_instructions</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Recoverable<br />
&nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Resets reset password token and send reset password instructions by email</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> send_reset_password_instructions<br />
&nbsp; &nbsp; &nbsp; &nbsp; generate_reset_password_token!<br />
&nbsp; &nbsp; &nbsp; &nbsp; ::Devise.<span style="color:#9900CC;">mailer</span>.<span style="color:#9900CC;">delay</span>.<span style="color:#9900CC;">reset_password_instructions</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Lockable<br />
&nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Send unlock instructions by email</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> send_unlock_instructions<br />
&nbsp; &nbsp; &nbsp; &nbsp; ::Devise.<span style="color:#9900CC;">mailer</span>.<span style="color:#9900CC;">delay</span>.<span style="color:#9900CC;">unlock_instructions</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div></p>

	<p>Questo metodo &#232; troppo legato per&#242; all&#8217;implementazione di Devise e non rappresenta quindi una valida soluzione (oltre ad essere veramente di pessima fattura).</p>


	<p>L&#8217;ultima idea, che poi rappresenta la soluzione adottata almeno fino a qualcosa di meglio, &#232; la seguente: utilizzare alias_method in questo modo:</p>

	<p><div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#devise_async.rb</span><br />
<span style="color:#9966CC; font-weight:bold;">module</span> Devise<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Models<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Confirmable<br />
&nbsp; &nbsp; &nbsp; alias_method <span style="color:#ff3333; font-weight:bold;">:send_confirmation_instructions_without_delay</span>, <span style="color:#ff3333; font-weight:bold;">:send_confirmation_instructions</span><br />
&nbsp; &nbsp; &nbsp; handle_asynchronously <span style="color:#ff3333; font-weight:bold;">:send_confirmation_instructions</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Recoverable<br />
&nbsp; &nbsp; &nbsp; alias_method <span style="color:#ff3333; font-weight:bold;">:send_reset_password_instructions_without_delay</span>, <span style="color:#ff3333; font-weight:bold;">:send_reset_password_instructions</span><br />
&nbsp; &nbsp; &nbsp; handle_asynchronously <span style="color:#ff3333; font-weight:bold;">:send_reset_password_instructions</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Lockable<br />
&nbsp; &nbsp; &nbsp; alias_method <span style="color:#ff3333; font-weight:bold;">:send_unlock_instructions_without_delay</span>, <span style="color:#ff3333; font-weight:bold;">:send_unlock_instructions</span><br />
&nbsp; &nbsp; &nbsp; handle_asynchronously <span style="color:#ff3333; font-weight:bold;">:send_unlock_instructions</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div></p>

	<p>Questo ultimo hack funziona a meraviglia, non &#232; il massimo ma permette di inviare mail da Devise in modo asincrono.</p>

	<p>Se avete altre soluzioni migliori, non esitate e condividerle.<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em>Share on:</em><br />
<a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Del.icio.us" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&#038;url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to digg" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to reddit" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Technorati" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Stumble Upon" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&#038;output=popup&#038;bkmk=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Google Bookmarks" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Rojo" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to OKnotizie" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3&#038;url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Diggita" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;t=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to FaceBook" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Upnews" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Twitter" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3&#038;url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Technotizie" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3&#038;url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to FriendFeed" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/&#038;title=Come+spedire+email+in+modo+asincrono+con+Devise+e+Rails3&#038;srcURL=http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Google Buzz" alt="Add 'Come spedire email in modo asincrono con Devise e Rails3' to Google Buzz" /></a></div><br />
<!-- Social Bookmarking Reloaded END --></p>
 <h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="<!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:-->"><!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="<!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:-->"><!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="<!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:-->"><!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/09/different-layout-for-the-same-controller/" title="<!--:en-->Different layout for the same controller<!--:--><!--:it-->Layout differenti per lo stesso controller<!--:-->"><!--:en-->Different layout for the same controller<!--:--><!--:it-->Layout differenti per lo stesso controller<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/09/rails-best-practices-6-filters-and-helpers-file/" title="<!--:en-->Rails Best Practices 6: Filters and helpers file<!--:--><!--:it-->Rails Best Practices 6: Filtri e file helper<!--:-->"><!--:en-->Rails Best Practices 6: Filters and helpers file<!--:--><!--:it-->Rails Best Practices 6: Filtri e file helper<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/uM34JfOoG_bOWI3kzUhdWAmHWYY/0/da"><img src="http://feedads.g.doubleclick.net/~a/uM34JfOoG_bOWI3kzUhdWAmHWYY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/uM34JfOoG_bOWI3kzUhdWAmHWYY/1/da"><img src="http://feedads.g.doubleclick.net/~a/uM34JfOoG_bOWI3kzUhdWAmHWYY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ABXSyQ1dehY:qtQ891vSSVY:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ABXSyQ1dehY:qtQ891vSSVY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ABXSyQ1dehY:qtQ891vSSVY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ABXSyQ1dehY:qtQ891vSSVY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ABXSyQ1dehY:qtQ891vSSVY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ABXSyQ1dehY:qtQ891vSSVY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/ABXSyQ1dehY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/03/how-to-send-email-asynchronously-using-devise-and-rails3/</feedburner:origLink></item>
		<item>
		<title>Come implementare due dropdown dipendenti l’una dall’altra in Django e jQuery</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/rPMFYCqq-dw/</link>
		<comments>http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 15:40:46 +0000</pubDate>
		<dc:creator>Stefano</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=1053</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Ciao a tutti.
Con l&#8217;articolo di oggi vorrei mostrare come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra usando Django e jQuery.
Supponiamo di avere una relazione 1-N tra marca di automobile e modello: nella prima dropdown vogliamo mostrare la lista delle marche; una volta selezionata una marca mostreremo nella seconda dropdown la lista dei modelli filtrati [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Ciao a tutti.</p>
<p>Con l&#8217;articolo di oggi vorrei mostrare come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra usando Django e jQuery.</p>
<p>Supponiamo di avere una relazione 1-N tra marca di automobile e modello: nella prima dropdown vogliamo mostrare la lista delle marche; una volta selezionata una marca mostreremo nella seconda dropdown la lista dei modelli filtrati per quella marca.</p>
<p>Ipotizziamo di avere i modelli definiti così:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#models.py</span><br />
<span style="color: #ff7700;font-weight:bold;">class</span> VehicleBrand<span style="color: black;">&#40;</span>models.<span style="color: black;">Model</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; description <span style="color: #66cc66;">=</span> models.<span style="color: black;">CharField</span><span style="color: black;">&#40;</span>max_length<span style="color: #66cc66;">=</span><span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #dc143c;">code</span> <span style="color: #66cc66;">=</span> models.<span style="color: black;">SlugField</span><span style="color: black;">&#40;</span>primary_key<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">class</span> VehicleModel<span style="color: black;">&#40;</span>models.<span style="color: black;">Model</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; description <span style="color: #66cc66;">=</span> models.<span style="color: black;">CharField</span><span style="color: black;">&#40;</span>max_length<span style="color: #66cc66;">=</span><span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #dc143c;">code</span> <span style="color: #66cc66;">=</span> models.<span style="color: black;">SlugField</span><span style="color: black;">&#40;</span>primary_key<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; brand <span style="color: #66cc66;">=</span> models.<span style="color: black;">ForeignKey</span><span style="color: black;">&#40;</span>VehicleBrand<span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Iniziamo a definire il templatetag da includere nei nostri template:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#templatetags.py</span><br />
<span style="color: #ff7700;font-weight:bold;">from</span> models <span style="color: #ff7700;font-weight:bold;">import</span> VehicleBrand<br />
<br />
<span style="color: #ff7700;font-weight:bold;">from</span> django <span style="color: #ff7700;font-weight:bold;">import</span> template<br />
<br />
register <span style="color: #66cc66;">=</span> template.<span style="color: black;">Library</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #66cc66;">@</span>register.<span style="color: black;">inclusion_tag</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;brand_model_select.html&quot;</span><span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">def</span> brand_model_select<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; brand_list <span style="color: #66cc66;">=</span> VehicleBrand.<span style="color: black;">objects</span>.<span style="color: #008000;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'brand_list'</span> : brand_list<span style="color: black;">&#125;</span></div></td></tr></tbody></table></div>
<p>Come possiamo vedere, il tag richiede un template html di supporto. Vediamo come è definito:</p>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">&lt;!-- brand_model_select.html --&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;get&quot;</span> <span style="color: #000066;">accept-charset</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;brand&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;brand&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Z&quot;</span>&gt;</span>Select a brand<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; {% for brand in brand_list %}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;{{ brand.code}}&quot;</span>&gt;</span>{{ brand.description }}<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; {% endfor %}<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;model&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;model&quot;</span> <span style="color: #000066;">disabled</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;true&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span>Select a model<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span><br />
&nbsp; &nbsp; $(document).ready(<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#brand&quot;).change(function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($(this).val() == 'Z') {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#model&quot;).html(&quot;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span>Select a model<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span>&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#model&quot;).attr('disabled', true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var url = &quot;/brand/&quot; + $(this).val() + &quot;/all_json_models&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var brand = $(this).val();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$.getJSON(url, function(models) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var options = '<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Z&quot;</span>&gt;</span>Select a model<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span>';<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (var i = 0; i <span style="color: #009900;">&lt; models.length; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; options +<span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'&lt;option value=&quot;'</span> + models<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.pk + <span style="color: #ff0000;">'&quot;&gt;</span></span>' + models[i].fields['description'] + '<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span>';<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#model&quot;).html(options);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#model option:first&quot;).attr('selected', 'selected');<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#model&quot;).attr('disabled', false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});<br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(&quot;select#model&quot;).change(function(vent) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($(this).val() == -1) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;myAwesomeFunctionToCallWhenAModelIsSelected();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});<br />
&nbsp; &nbsp; }<br />
<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Possiamo notare che non appena viene selezionato una marca, viene invocata una chiamata Ajax a questa url:<br />
/brand/&#8221;selected_brand_code&#8221;/all_json_models</p>
<p>Dobbiamo definire dunque un&#8217;apposita view per poter intercettare questa url:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#views.py</span><br />
<span style="color: #ff7700;font-weight:bold;">def</span> all_json_models<span style="color: black;">&#40;</span>request<span style="color: #66cc66;">,</span> brand<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; current_brand <span style="color: #66cc66;">=</span> VehicleBrand.<span style="color: black;">objects</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">code</span><span style="color: #66cc66;">=</span>brand<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; models <span style="color: #66cc66;">=</span> VehicleModel.<span style="color: black;">objects</span>.<span style="color: #008000;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span>brand<span style="color: #66cc66;">=</span>current_brand<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; json_models <span style="color: #66cc66;">=</span> serializers.<span style="color: black;">serialize</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;json&quot;</span><span style="color: #66cc66;">,</span> models<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> HttpResponse<span style="color: black;">&#40;</span>json_models<span style="color: #66cc66;">,</span> mimetype<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;application/javascript&quot;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>e in urls.py:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#urls.py</span><br />
...<br />
<span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^brand/(?P&lt;brand&gt;[-<span style="color: #000099; font-weight: bold;">\w</span>]+)/all_json_models/$'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'all_json_models'</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span></div></td></tr></tbody></table></div>
<p>Infine, il metodo javascript myAwesomeFunctionToCallWhenAModelIsSelected(); verrà scatenato una volta selezionato il nostro modello.<!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Del.icio.us" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to digg" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to reddit" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Technorati" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Stumble Upon" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Google Bookmarks" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Rojo" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to OKnotizie" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery&amp;url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Diggita" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;t=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to FaceBook" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Upnews" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Twitter" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery&amp;url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Technotizie" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery&amp;url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to FriendFeed" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/&amp;title=Come+implementare+due+dropdown+dipendenti+l%26%238217%3Buna+dall%26%238217%3Baltra+in+Django+e+jQuery&amp;srcURL=http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Google Buzz" alt="Add 'Come implementare due dropdown dipendenti l&#8217;una dall&#8217;altra in Django e jQuery' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/03/new-layout-easier-and-spacious/" title="<!--:en-->A new layout easier and more spacious<!--:--><!--:it-->Un nuovo layout più semplice e spazioso<!--:-->"><!--:en-->A new layout easier and more spacious<!--:--><!--:it-->Un nuovo layout più semplice e spazioso<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/01/how-to-create-a-custom-feed-in-django-using-the-syndication-feed-framework/" title="<!--:en-->How to create a custom feed in Django using the Syndication Feed Framework<!--:--><!--:it-->Creare un custom feed in Django con il Syndication Feed Framework<!--:-->"><!--:en-->How to create a custom feed in Django using the Syndication Feed Framework<!--:--><!--:it-->Creare un custom feed in Django con il Syndication Feed Framework<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/12/ruby-on-rails-and-jquery-multiselect-with-checkbox/" title="<!--:en-->Ruby on Rails and jQuery: multiselect with checkbox<!--:--><!--:it-->Ruby on Rails e jQuery: multiselect con checkbox<!--:-->"><!--:en-->Ruby on Rails and jQuery: multiselect with checkbox<!--:--><!--:it-->Ruby on Rails e jQuery: multiselect con checkbox<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/08/how-to-create-multiple-django-environments-using-virtualenv/" title="<!--:en-->How to create multiple Django environments using virtualenv<!--:--><!--:it-->Come creare multipli ambienti Django con virtualenv<!--:-->"><!--:en-->How to create multiple Django environments using virtualenv<!--:--><!--:it-->Come creare multipli ambienti Django con virtualenv<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/S3jGUUmwOZHkaBicgAnnSs4tLRc/0/da"><img src="http://feedads.g.doubleclick.net/~a/S3jGUUmwOZHkaBicgAnnSs4tLRc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/S3jGUUmwOZHkaBicgAnnSs4tLRc/1/da"><img src="http://feedads.g.doubleclick.net/~a/S3jGUUmwOZHkaBicgAnnSs4tLRc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=rPMFYCqq-dw:HBhF00xNvJc:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=rPMFYCqq-dw:HBhF00xNvJc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=rPMFYCqq-dw:HBhF00xNvJc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=rPMFYCqq-dw:HBhF00xNvJc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=rPMFYCqq-dw:HBhF00xNvJc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=rPMFYCqq-dw:HBhF00xNvJc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/rPMFYCqq-dw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/02/how-to-implement-two-dropdowns-dependent-on-each-other-using-django-and-jquery/</feedburner:origLink></item>
		<item>
		<title>Ruby Enumerables: Operazioni con le hash</title>
		<link>http://feedproxy.google.com/~r/devinterfaceblog/it/~3/ADgSlQnZkjs/</link>
		<comments>http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 10:42:48 +0000</pubDate>
		<dc:creator>Claudio</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Svliluppo]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[sorting]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.devinterface.com/?p=994</guid>
		<description><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>

(Powered by LaunchBit)

Nel mio ultimo post ho parlato delle hash di Ruby.
Oggi riprendo e completo l&#8217;argomento descrivendo alcune delle operazioni che si possono eseguire sulle hash per manipolarne i valori.
1. Accedere ai valori iterativamente
La classe Hash di ruby mette a disposizione tre diversi iteratori: each, each_key, each_value.
Esiste in realtà un quarto iteratore, each_pair che però [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.launchbit.com/az/140-235/"><img width="468" height="60" src="http://www.launchbit.com/az-images/140-235/" /></a><br />
<small>(Powered by <a href="http://www.launchbit.com/lb/140-235/">LaunchBit</a>)</small>
</p>
<p>Nel mio ultimo post ho parlato delle <a href="http://blog.devinterface.com/it/2011/01/ruby-enumerables-hashes/" title="Ruby Enumerables: Hashes">hash di Ruby</a>.<br />
Oggi riprendo e completo l&#8217;argomento descrivendo alcune delle operazioni che si possono eseguire sulle hash per manipolarne i valori.<br />
<strong>1. Accedere ai valori iterativamente</strong><br />
La classe Hash di ruby mette a disposizione tre diversi iteratori: <em>each</em>, <em>each_key</em>, <em>each_value</em>.<br />
Esiste in realtà un quarto iteratore, <em>each_pair</em> che però è solo un alias di <em>each</em>.<br />
Come ci si può aspettare l&#8217;iteratore <em>each</em> funziona come segue:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;company&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;DevInterface&quot;</span>, <span style="color:#996600;">&quot;activity&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Web Agency&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>key, val<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; <span style="color:#CC0066; font-weight:bold;">p</span> key, <span style="color:#996600;">&quot;: &quot;</span>, val<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#008000; font-style:italic;"># Will print</span><br />
<span style="color:#996600;">&quot;company: DevInterface&quot;</span><br />
<span style="color:#996600;">&quot;activity: Web Agency&quot;</span></div></td></tr></tbody></table></div>
<p>Gli altri due operatori permettono rispettivamente di iterare solo sulle chiavi o solo sui valori della hash.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;name&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Claudio&quot;</span>, <span style="color:#996600;">&quot;role&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Web Developer&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">each_key</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>key<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; <span style="color:#CC0066; font-weight:bold;">p</span> key<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#008000; font-style:italic;"># Will print</span><br />
<span style="color:#996600;">&quot;name&quot;</span><br />
<span style="color:#996600;">&quot;role&quot;</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;name&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Claudio&quot;</span>, <span style="color:#996600;">&quot;role&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Web Developer&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">each_value</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>val<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; <span style="color:#CC0066; font-weight:bold;">p</span> val<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#008000; font-style:italic;"># Will print</span><br />
<span style="color:#996600;">&quot;Claudio&quot;</span><br />
<span style="color:#996600;">&quot;Web Developer&quot;</span></div></td></tr></tbody></table></div>
<p><strong>2. Invertire i valori con le chiavi</strong><br />
Un&#8217;operazione che può essere molto utile in certi casi è l&#8217;inversione dei valori con le chiavi.<br />
L&#8217;esempio classico è la rubrica telefonica.<br />
Supponiamo di avere una hash che contiene la rubrica telefonica come segue</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">phone_numbers = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;DevInterface&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;339-045-2223836&quot;</span>, <span style="color:#996600;">&quot;John&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;555-6677&quot;</span>, <span style="color:#996600;">&quot;Stefano&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;335-12345678&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>e di voler sapere a chi appartiene il numero &#8220;555-6677&#8243;.<br />
Potremmo iterare su tutta la hash fino a trovare il valore cercato e poi ritornare la chiave. Ma se la hash invece di 3 elementi ne contenesse 1000 questa operazione diventerebbe molto lenta.<br />
L&#8217;alternativa è invertire la nostra hash in modo che i numeri diventino le chiavi ed i nomi i valori.<br />
La class Hash mette a disposizione per questo scopo il metodo <em>invert</em>:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">inverted_phone_numbers = phone_numbers.<span style="color:#9900CC;">invert</span><br />
inverted_phone_numbers<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;555-6677&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> &nbsp;<span style="color:#008000; font-style:italic;"># Will return &quot;John&quot;</span></div></td></tr></tbody></table></div>
<p>Prima di utilizzare il metodo <em>invert</em> tuttavia, è necessario tenere presente che le hash hanno chiavi uniche, ma i valori possono essere duplicati.<br />
Di conseguenza, quando si inverte una hash eventuali valori duplicati saranno convertiti in un unica chiave, con conseguente perdita di informazioni.<br />
Di fatto, non è predicibile quale dei valori verrà tenuto e quali verranno invece scartati.<br />
Riprendendo l&#8217;esempio della rubrica se avessimo:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">phone_numbers = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;DevInterface&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;339-045-2223836&quot;</span>, <span style="color:#996600;">&quot;John&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;555-6677&quot;</span>, <span style="color:#996600;">&quot;Mary&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;555-6677&quot;</span>, <span style="color:#996600;">&quot;Stefano&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;335-12345678&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>ed eseguissimo la stessa operazione di prima</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">inverted_phone_numbers = phone_numbers.<span style="color:#9900CC;">invert</span><br />
inverted_phone_numbers<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;555-6677&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> &nbsp;<span style="color:#008000; font-style:italic;"># Will return &quot;John&quot; or &quot;Mary&quot;</span></div></td></tr></tbody></table></div>
<p>non potremo sapere con certezza se ci verrà restituito &#8220;John&#8221; oppure &#8220;Mary&#8221;.<br />
<strong>3. Convertire un hash in un array</strong><br />
E&#8217; possibile convertire una hash in un array utilizzando il metodo <em>to_a</em>.<br />
Il risultato sarà un array in cui gli elementi pari corrispondono alle chiavi ed i dispari ai valori della hash di partenza.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">my_hash = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;a&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">1</span>, <span style="color:#996600;">&quot;b&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">2</span>, <span style="color:#996600;">&quot;c&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
my_hash.<span style="color:#9900CC;">to_a</span> &nbsp; <span style="color:#008000; font-style:italic;"># [&quot;a&quot;, 1, &quot;b&quot;, 2, &quot;c&quot;, 3]</span></div></td></tr></tbody></table></div>
<p>A volte però è più comodo avere due array separati per chiavi e valori. E&#8217; possibile ottenerli nel seguente modo:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">my_hash.<span style="color:#9900CC;">keys</span>.<span style="color:#9900CC;">to_a</span> &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]</span><br />
my_hash.<span style="color:#9900CC;">values</span>.<span style="color:#9900CC;">to_a</span> &nbsp; <span style="color:#008000; font-style:italic;"># [1, 2, 3]</span></div></td></tr></tbody></table></div>
<p>Infine, utilizzando il metodo <em>values_at</em> della classe Hash è possibile estrarre in un array solo alcuni valori specifici, determinati dalle chiavi passate al metodo:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">my_hash.<span style="color:#9900CC;">values_at</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;a&quot;</span>, <span style="color:#996600;">&quot;c&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> &nbsp; <span style="color:#008000; font-style:italic;"># [1, 3]</span></div></td></tr></tbody></table></div>
<p>Ruby permette anche la conversione inversa, ovvero creare una hash a partire da un array:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">my_array = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>, <span style="color:#006666;">2</span>, <span style="color:#006666;">3</span>, <span style="color:#006666;">4</span>, <span style="color:#006666;">5</span>, <span style="color:#006666;">6</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
my_hash = <span style="color:#CC00FF; font-weight:bold;">Hash</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">*</span>my_array<span style="color:#006600; font-weight:bold;">&#93;</span> &nbsp; <span style="color:#008000; font-style:italic;"># {1 =&gt; 2, 3 =&gt; 4, 5 =&gt; 6}</span></div></td></tr></tbody></table></div>
<p>Questa conversione è possibile solo se l&#8217;array ha un numero pari di elementi.<br />
<strong>4. Ordinamento</strong><br />
Una hash, come visto nel <a href="http://blog.devinterface.com/it/2011/01/ruby-enumerables-hashes/" title="Ruby Enumerables: Hashes">post precedente</a>, è una struttura non ordinata.<br />
Tuttavia in alcuni casi può rendersi necesario ordinarne i valori. Esiste quindi un metodo <em>sort</em> anche per le hash il cui risultato però è un array.<br />
Questo perchè Ruby, per ordinare una hash la converte in un array di array e poi lo ordina.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">beatles = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;Jonn&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Lennon&quot;</span>, <span style="color:#996600;">&quot;Ringo&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Starr&quot;</span>, <span style="color:#996600;">&quot;Paul&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;McCartney&quot;</span>, <span style="color:#996600;">&quot;George&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Harrison&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
beatles.<span style="color:#9900CC;">sort</span> &nbsp;<span style="color:#008000; font-style:italic;"># &nbsp;[[&quot;George&quot;, &quot;Harrison&quot;], [&quot;Jonn&quot;, &quot;Lennon&quot;], [&quot;Paul&quot;, &quot;McCartney&quot;], [&quot;Ringo&quot;, &quot;Starr&quot;]]</span></div></td></tr></tbody></table></div>
<p><strong>5. Merge di due Hash</strong><br />
L&#8217;ultimo argomento che voglio trattare oggi è il merge di due hash.<br />
Supponiamo di voler fare un improbabile merge tra due storici gruppi, i Beatles ed i Rolling Stones:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">beatles = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;Jonn&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Lennon&quot;</span>, <span style="color:#996600;">&quot;Ringo&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Starr&quot;</span>, <span style="color:#996600;">&quot;Paul&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;McCartney&quot;</span>, <span style="color:#996600;">&quot;George&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Harrison&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
rolling_stones = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;Mick&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Jagger&quot;</span>, <span style="color:#996600;">&quot;Keith&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Richards&quot;</span>, <span style="color:#996600;">&quot;Ronnie&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Wood&quot;</span>, <span style="color:#996600;">&quot;Charlie&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Watts&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
rolling_beatles = beatles.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span>rolling_stones<span style="color:#006600; font-weight:bold;">&#41;</span></div></td></tr></tbody></table></div>
<p>Il risultato è una terza hash composta come segue:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#CC0066; font-weight:bold;">p</span> rolling_beatles<br />
<span style="color:#008000; font-style:italic;"># {&quot;Jonn&quot; =&gt; &quot;Lennon&quot;, &quot;Ringo&quot; =&gt; &quot;Starr&quot;, &quot;Paul&quot; =&gt; &quot;McCartney&quot;, &quot;George&quot; =&gt; &quot;Harrison&quot;,</span><br />
&nbsp;<span style="color:#996600;">&quot;Mick&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Jagger&quot;</span>, <span style="color:#996600;">&quot;Keith&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Richards&quot;</span>, <span style="color:#996600;">&quot;Ronnie&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Wood&quot;</span>, <span style="color:#996600;">&quot;Charlie&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Watts&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>Nel caso di chiavi duplicate però, il merge mantiene solo la chiave della seconda hash:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">a = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;a&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">1</span>, <span style="color:#996600;">&quot;b&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">2</span>, <span style="color:#996600;">&quot;c&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
b = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;a&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">5</span>, <span style="color:#996600;">&quot;d&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">7</span>, <span style="color:#996600;">&quot;e&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
c = a.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span>b<span style="color:#006600; font-weight:bold;">&#41;</span> &nbsp;<span style="color:#008000; font-style:italic;"># {&quot;a&quot; =&gt; 5, &quot;b&quot; =&gt; 2, &quot;c&quot; =&gt;3, &quot;d&quot; =&gt; 7, &quot;e&quot; =&gt; 9}</span></div></td></tr></tbody></table></div>
<p>In alternativa, è possibile passare al metodo <em>merge</em> un blocco di codice per gestire i conflitti sulle chiavi</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:450px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">a = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;a&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">1</span>, <span style="color:#996600;">&quot;b&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">2</span>, <span style="color:#996600;">&quot;c&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
b = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">&quot;a&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">5</span>, <span style="color:#996600;">&quot;d&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">7</span>, <span style="color:#996600;">&quot;e&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
c = a.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span>b<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>key, old_val, new_val<span style="color:#006600; font-weight:bold;">|</span> old_val <span style="color:#006600; font-weight:bold;">&lt;</span> new_val ? old_val : new_val<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp;<span style="color:#008000; font-style:italic;"># {&quot;a&quot; =&gt; 1, &quot;b&quot; =&gt; 2, &quot;c&quot; =&gt;3, &quot;d&quot; =&gt; 7, &quot;e&quot; =&gt; 9}</span></div></td></tr></tbody></table></div>
<p>Come potete vedere il risultato di questo merge è differente dal precedente in base alla condizione specificata nel blocco di codice.<!-- Social Bookmarking Reloaded BEGIN -->
<div class="social_bookmark"><em>Share on:</em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to Del.icio.us"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Del.icio.us" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to digg"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to digg" alt="Add 'Ruby Enumerables: Operazioni con le hash' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to reddit"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to reddit" alt="Add 'Ruby Enumerables: Operazioni con le hash' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to Technorati"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Technorati" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to Stumble Upon"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Stumble Upon" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to Google Bookmarks"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/google.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Google Bookmarks" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Google Bookmarks" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to Rojo"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/rojo.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Rojo" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Rojo" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://oknotizie.alice.it/post?url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to OKnotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif" title="Add 'Ruby Enumerables: Operazioni con le hash' to OKnotizie" alt="Add 'Ruby Enumerables: Operazioni con le hash' to OKnotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diggita.it/submit.php?title=Ruby+Enumerables%3A+Operazioni+con+le+hash&amp;url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to Diggita"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/diggita.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Diggita" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Diggita" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;t=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to FaceBook"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to FaceBook" alt="Add 'Ruby Enumerables: Operazioni con le hash' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.upnews.it/submit?url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash" title="Add 'Ruby Enumerables: Operazioni con le hash' to Upnews"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/upnews.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Upnews" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Upnews" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to Twitter"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Twitter" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Twitter" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technotizie.it/posta_ok?action=f2&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash&amp;url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to Technotizie"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/technotizie.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Technotizie" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Technotizie" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://friendfeed.com/share/bookmarklet/frame#title=Ruby+Enumerables%3A+Operazioni+con+le+hash&amp;url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to FriendFeed"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/friendfeed.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to FriendFeed" alt="Add 'Ruby Enumerables: Operazioni con le hash' to FriendFeed" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/reader/link?url=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/&amp;title=Ruby+Enumerables%3A+Operazioni+con+le+hash&amp;srcURL=http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/" title="Add 'Ruby Enumerables: Operazioni con le hash' to Google Buzz"><img src="http://blog.devinterface.com/wp-content/plugins/social-bookmarking-reloaded/googlebuzz.png" title="Add 'Ruby Enumerables: Operazioni con le hash' to Google Buzz" alt="Add 'Ruby Enumerables: Operazioni con le hash' to Google Buzz" /></a></div>
<p><!-- Social Bookmarking Reloaded END --></p>
<h2  class="related_post_title">Related Post</h2><ul class="related_post"><li><a href="http://blog.devinterface.com/it/2011/01/ruby-enumerables-hashes/" title="<!--:en-->Ruby Enumerables: Hashes<!--:--><!--:it-->Ruby Enumerables: Hashes<!--:-->"><!--:en-->Ruby Enumerables: Hashes<!--:--><!--:it-->Ruby Enumerables: Hashes<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/08/tips-multiple-pagination-with-will_paginate/" title="<!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:-->"><!--:en-->Tips: Multiple pagination with will_paginate<!--:--><!--:it-->Tips: Paginazione multipla con will_paginate<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/05/two-step-signup-with-devise/" title="<!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:-->"><!--:en-->Two step signup with Devise<!--:--><!--:it-->Registrazione in due step con Devise<!--:--></a></li><li><a href="http://blog.devinterface.com/it/2011/04/prevent-registration-of-reserved-login/" title="<!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:-->"><!--:en-->Prevent registration of reserved login<!--:--><!--:it-->Prevenire la registrazione di login riservate <!--:--></a></li><li><a href="http://blog.devinterface.com/it/2010/07/design-patterns-in-ruby-chain-of-responsibility/" title="<!--:en-->Design Patterns in Ruby: Chain of Responsibility<!--:--><!--:it-->Design Patterns in Ruby: Chain of Responsibility<!--:-->"><!--:en-->Design Patterns in Ruby: Chain of Responsibility<!--:--><!--:it-->Design Patterns in Ruby: Chain of Responsibility<!--:--></a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/QsdDAvAk0Pip6de76Ra-LJM3eR0/0/da"><img src="http://feedads.g.doubleclick.net/~a/QsdDAvAk0Pip6de76Ra-LJM3eR0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/QsdDAvAk0Pip6de76Ra-LJM3eR0/1/da"><img src="http://feedads.g.doubleclick.net/~a/QsdDAvAk0Pip6de76Ra-LJM3eR0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ADgSlQnZkjs:u4lQBJHE7go:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ADgSlQnZkjs:u4lQBJHE7go:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ADgSlQnZkjs:u4lQBJHE7go:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ADgSlQnZkjs:u4lQBJHE7go:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/devinterfaceblog/it?a=ADgSlQnZkjs:u4lQBJHE7go:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/devinterfaceblog/it?i=ADgSlQnZkjs:u4lQBJHE7go:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/devinterfaceblog/it/~4/ADgSlQnZkjs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blog.devinterface.com/it/2011/02/ruby-enumerables-operation-on-hashes/</feedburner:origLink></item>
	</channel>
</rss>

