<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>LetRails &#187; AJAX</title>
	<atom:link href="http://www.letrails.cn/archives/category/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.letrails.cn</link>
	<description></description>
	<lastBuildDate>Sat, 06 Aug 2011 07:02:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Javascript实现GMail无刷新文件上传</title>
		<link>http://www.letrails.cn/archives/javascript%e5%ae%9e%e7%8e%b0gmail%e6%97%a0%e5%88%b7%e6%96%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0/</link>
		<comments>http://www.letrails.cn/archives/javascript%e5%ae%9e%e7%8e%b0gmail%e6%97%a0%e5%88%b7%e6%96%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 07:32:50 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/?p=258</guid>
		<description><![CDATA[最近需要给抢答增加文件上传支持，但是个人不喜欢Flash方式，Google了一下，找到这篇实现异步上传的文章，讲的比较清楚。 要实现类似GMail的无刷新文件上传，原理其实很简单，就是将form的target设置为一个iframe，这样当表单提交后刷新的就是那个iframe，而不是form所在的页面，然后再通过Javascript获取iframe内的响应，并将结果展示给用户。 &#60;%= form_for :photo, :html =&#62; {:id =&#62; 'photo_upload', :multipart =&#62; true, :target =&#62; 'upload_target'} do &#124;f&#124; %&#62; &#60;%= f.file_field :file, {:id =&#62; 'file_upload', nchange =&#62; '$('#photo_upload').submit();'} %&#62; &#60;%= end %&#62; &#60;iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"&#62;&#60;/iframe&#62; 就像上面的代码，当用户选择文件后，表单会自动提交，响应会显示在那个隐藏的iframe里面，如果想要告诉用户上传是否成功（比如是否超出尺寸限制等），就需要读取iframe内的数据，可以让Rails返回JSON格式的结果，然后通过JS直接读取。 # Rails代码 respond_to do &#124;wants&#124; if @photo.save wants.html {render :text =&#62; {:result =&#62; 'success', bject =&#62; [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="配置ActionMailer使用GMail发送邮件" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fusing-gmail-smtp-with-actionmailer%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">配置ActionMailer使用GMail发送邮件</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Plotr：轻量级的Javascript制图库" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F54%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251506.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Plotr：轻量级的Javascript制图库</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Aptana IDE: 全新开源Ruby+Rails+JavaScript+HTML工作台" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F7%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251499.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Aptana IDE: 全新开源Ruby+Rails+JavaScript+HTML工作台</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Javascript on Junction: 客户端的RoR" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F28%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Javascript on Junction: 客户端的RoR</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>最近需要给<a href="http://www.51qiangda.com">抢答</a>增加文件上传支持，但是个人不喜欢Flash方式，Google了一下，找到这篇<a href="http://www.openjs.com/articles/ajax/ajax_file_upload/response_data.php">实现异步上传的文章</a>，讲的比较清楚。</p>
<p>要实现类似GMail的无刷新文件上传，原理其实很简单，就是将form的target设置为一个iframe，这样当表单提交后刷新的就是那个iframe，而不是form所在的页面，然后再通过Javascript获取iframe内的响应，并将结果展示给用户。</p>
<p class="code"><code class="ruby"><span id="more-258"></span><br />
&lt;%= form_for :photo, :html =&gt; {:id =&gt; 'photo_upload', :multipart =&gt; true, :target =&gt; 'upload_target'} do |f| %&gt;<br />
&lt;%= f.file_field :file, {:id =&gt; 'file_upload', <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange =&gt; '$('#photo_upload').submit();'} %&gt;<br />
&lt;%= end %&gt;<br />
&lt;iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"&gt;&lt;/iframe&gt;<br />
</code></p>
<p>就像上面的代码，当用户选择文件后，表单会自动提交，响应会显示在那个隐藏的iframe里面，如果想要告诉用户上传是否成功（比如是否超出尺寸限制等），就需要读取iframe内的数据，可以让Rails返回JSON格式的结果，然后通过JS直接读取。</p>
<p class="code"><code class="ruby"><br />
# Rails代码<br />
respond_to do |wants|<br />
if @photo.save<br />
wants.html {render :text =&gt; {:result =&gt; 'success', <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> bject =&gt; @photo}.to_json }<br />
else<br />
wants.html {render :text =&gt; {:result =&gt; 'failed', :errors =&gt; @photo.errors}.to_json}<br />
end<br />
end<br />
</code></p>
<p>下面是JS代码，需要为iframe绑定onload方法，这样只有当文件上传结束后，JS才会被调用。</p>
<p class="code"><code class="ruby"><br />
$(function(){<br />
$("upload_target").load(function(){<br />
var result = $('#upload_target').contents.find("body").html();<br />
var data = eval("("+result+")");<br />
if(data['result'] != 'success') {<br />
alert("上传成功！");<br />
} else {<br />
alert("上传失败：" + data['errors'][0][1].join());<br />
}<br />
});<br />
});<br />
</code></p>
<p>下面是抢答的Demo，不支持IE，IE请点这里看<a href="http://www.51qiangda.com/forms/4c9b4393b3e57c5591000001">完整表单</a>。</p>
<p>&nbsp;</p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="配置ActionMailer使用GMail发送邮件" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fusing-gmail-smtp-with-actionmailer%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">配置ActionMailer使用GMail发送邮件</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Plotr：轻量级的Javascript制图库" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F54%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251506.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Plotr：轻量级的Javascript制图库</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Aptana IDE: 全新开源Ruby+Rails+JavaScript+HTML工作台" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F7%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251499.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Aptana IDE: 全新开源Ruby+Rails+JavaScript+HTML工作台</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Javascript on Junction: 客户端的RoR" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F28%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fjavascript%25E5%25AE%259E%25E7%258E%25B0gmail%25E6%2597%25A0%25E5%2588%25B7%25E6%2596%25B0%25E6%2596%2587%25E4%25BB%25B6%25E4%25B8%258A%25E4%25BC%25A0%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Javascript on Junction: 客户端的RoR</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/javascript%e5%ae%9e%e7%8e%b0gmail%e6%97%a0%e5%88%b7%e6%96%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajax Rating: 简易打分插件</title>
		<link>http://www.letrails.cn/archives/ajax-rating-plugin/</link>
		<comments>http://www.letrails.cn/archives/ajax-rating-plugin/#comments</comments>
		<pubDate>Thu, 29 May 2008 08:49:24 +0000</pubDate>
		<dc:creator>yuanyi</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[插件]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/ajax-rating-plugin</guid>
		<description><![CDATA[刚完成的一个小插件，比较粗糙，欢迎多提意见。 安装 $ cd vendor/plugins $ git clone git://github.com/yzhang/ajax_rating.git 使用 在你要评分的model中添加acts_as_ratable，比如post： class Post &#60; ActiveRecord::Base &#160;&#160; :acts_as_ratable end 这为post增加了如下方法： rating，当前post的平均得分 rating_count，评分人数 在可以打分的Model中添加acts_as_rater，比如user： class User &#60; ActiveRecord::Base &#160;&#160; :acts_as_rater end 这为User增加了如下方法： rating_on(ratable)，返回这个用户为某个对象打的分（1-5） 然后在view中调用： rating_tag(rater, ratable) rater就是打分者，ratable则是被评分的对象，如果rater为nil，则用户只能看到分数，但不能打分。 如果需要自定义外观，可以修改rating.css和images下的star123.png，关于CSS的原理说明请参看（十分对不起原作者，找不到原始出处）：http://www.viphot.com/InfoView/Article_285645.html 如果为了安全考虑，需要限制只有当前登录用户可以打分，可以通过定义RatingsController#current_rater实现： class RatingsController &#60; ActiveController::Base &#160;&#160; :before_filter :login_required &#160;&#160;def current_rater &#160;&#160;&#160;&#160;current_user &#160;&#160;end end 这样客户端传递的rater参数将失去作用。 完整例子 1. 创建demo： $ rails [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="AJAX分页(paginate)" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">AJAX分页(paginate)</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="select层叠的AJAX实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251431.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">select层叠的AJAX实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="God: Monit的Ruby实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F46%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251661.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">God: Monit的Ruby实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Railsbench简明指南(0.9.2)" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F18%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251762.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Railsbench简明指南(0.9.2)</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>刚完成的一个小插件，比较粗糙，欢迎多提意见。</p>
<p><strong>安装</strong></p>
<p>$ cd vendor/plugins<br />
$ git clone <a href="http://github.com/yzhang/ajax_rating/tree/master">git://github.com/yzhang/ajax_rating.git</a></p>
<p><strong>使用</strong></p>
<p>在你要评分的model中添加acts_as_ratable，比如post：</p>
<p class="code"><code class="ruby"><br />
class Post &lt; ActiveRecord::Base<br />
&nbsp;&nbsp; :acts_as_ratable<br />
end</code></p>
<p>这为post增加了如下方法：</p>
<ol>
<li>rating，当前post的平均得分</li>
<li>rating_count，评分人数</li>
</ol>
<p>在可以打分的Model中添加acts_as_rater，比如user：</p>
<p class="code"><code class="ruby"><br />
class User &lt; ActiveRecord::Base<br />
&nbsp;&nbsp; :acts_as_rater<br />
end</code></p>
<p>这为User增加了如下方法：</p>
<ol>
<li>rating_on(ratable)，返回这个用户为某个对象打的分（1-5）</li>
</ol>
<p>然后在view中调用：</p>
<p>rating_tag(rater, ratable)</p>
<p>rater就是打分者，ratable则是被评分的对象，如果rater为nil，则用户只能看到分数，但不能打分。</p>
<p>如果需要自定义外观，可以修改rating.css和images下的star123.png，关于CSS的原理说明请参看（十分对不起原作者，找不到原始出处）：<a href="http://www.viphot.com/InfoView/Article_285645.html">http://www.viphot.com/InfoView/Article_285645.html</a></p>
<p>如果为了安全考虑，需要限制只有当前登录用户可以打分，可以通过定义RatingsController#current_rater实现：</p>
<p class="code"><code class="ruby"><br />
class RatingsController &lt; ActiveController::Base<br />
&nbsp;&nbsp; :before_filter :login_required<br />
&nbsp;&nbsp;def current_rater<br />
&nbsp;&nbsp;&nbsp;&nbsp;current_user<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p>这样客户端传递的rater参数将失去作用。</p>
<p><strong>完整例子</strong></p>
<p>1. 创建demo：</p>
<p>$ rails ratable_demo<br />
$ cd ratable_demo</p>
<p>2. 安装RESTFul_Auth</p>
<p>$ git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful_authentication<br />
$ ./script/generate authenticated user sessions</p>
<p>3. 安装Ajax Rating</p>
<p>$ cd vendor/plugins<br />
$ git clone git://github.com/yzhang/ajax_rating.git<br />
$ cd ../../<br />
$ ./script/generate ratable</p>
<p>4. 创建打分对象</p>
<p>$ ./script/generate scaffold post title:string body:text<br />
$ rake db:migrate</p>
<p>5. 修改user.rb</p>
<p class="code"><code class="ruby"><br />
class User &lt; ActiveRecord::Base<br />
&nbsp;&nbsp; :acts_as_rater<br />
end<br />
</code></p>
<p>6. 修改post.rb</p>
<p class="code"><code class="ruby"><br />
class Post &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;acts_as_ratable<br />
end<br />
</code></p>
<p>7. 修改 app/views/layout/posts.html.erb，包含Prototype和rating.css：</p>
<p class="code"><code class="ruby"><br />
&lt;%= stylesheet_link_tag  'scaffold', 'rating'  %&gt;<br />
&lt;%= javascript_include_tag :defaults %&gt;<br />
</code></p>
<p>8. 修改application.rb:</p>
<p class="code"><code class="ruby"><br />
include AuthenticatedSystem<br />
</code></p>
<p>9. 修改app/views/posts/show.html.erb:</p>
<p class="code"><code class="ruby"><br />
&lt;% if logged_in? -%&gt;<br />
&nbsp;&nbsp; &lt;%= rating_tag current_user, @post %&gt;<br />
&lt;% else -%&gt;<br />
&nbsp;&nbsp; &lt;%= rating_tag nil, @post %&gt;<br />
&nbsp;&nbsp; &lt;%= link_to 'login to rating this post', new_session_path %&gt;<br />
&lt;% end -%&gt;<br />
</code></p>
<p>启动server，打开浏览器到/posts，创建一个新的Post，应该就可以看到一个打分的标签了。</p>
<p><img src="http://lilac.greatweb.cn/rails/wp-content/uploads/2008/05/7-4.png" alt="7-4.png" /></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="AJAX分页(paginate)" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">AJAX分页(paginate)</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="select层叠的AJAX实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251431.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">select层叠的AJAX实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="NetBeans IDE: Windows平台最好的Ruby IDE" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F15%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251498.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">NetBeans IDE: Windows平台最好的Ruby IDE</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="在Rails中创建多对多映射" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251550.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">在Rails中创建多对多映射</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/ajax-rating-plugin/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AJAX分页(paginate)</title>
		<link>http://www.letrails.cn/archives/07-10-25-ajax-will-paginate/</link>
		<comments>http://www.letrails.cn/archives/07-10-25-ajax-will-paginate/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 07:40:43 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/07-10-25-ajax-will-paginate</guid>
		<description><![CDATA[前段时间忙于Shanghai on Rails，没怎么更新，不太好意思，活动纪实随后奉上。 will_paginate是个好插件，但它不支持AJAX，在Ruby on Rails Wiki里找到一篇文章，通过一个很简单的Hack，实现了AJAX的分页，方法如下： 1. 在application_helper.r中定义will_paginate_remote helper: def will_paginate_remote(paginator, options={}) &#160;&#160;update = options.delete(:update) &#160;&#160;url = options.delete(:url) &#160;&#160;str = will_paginate(paginator, options) &#160;&#160;if str != nil &#160;&#160;&#160;&#160;str.gsub(/href="(.*?)"/) do &#160;&#160;&#160;&#160;&#160;&#160;"href=\"#\" onclick=\"new Ajax.Updater('" + update + "', '" + (url ? url + $1.sub(/[^\?]*/, '') : $1) + &#160;&#160;&#160;&#160;&#160;&#160;"', {asynchronous:true, evalScripts:true, method:'get',}); return false;\"" &#160;&#160;&#160;&#160;end &#160;&#160;end [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Ajax Rating: 简易打分插件" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Ajax Rating: 简易打分插件</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="select层叠的AJAX实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251431.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">select层叠的AJAX实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="自定义will_paginage输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fcustom-will-paginate-renderer%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">自定义will_paginage输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="God: Monit的Ruby实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F46%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251661.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">God: Monit的Ruby实现</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>前段时间忙于<a href="http://www.shanghaionrails.com">Shanghai on Rails</a>，没怎么更新，不太好意思，活动纪实随后奉上。</p>
<p>will_paginate是个好插件，但它不支持AJAX，在<a href="http://wiki.rubyonrails.org/rails/pages/How+to+Paginate+With+Ajax">Ruby on Rails Wiki里找到一篇文章</a>，通过一个很简单的Hack，实现了AJAX的分页，方法如下：</p>
<p>1. 在application_helper.r中定义will_paginate_remote helper:</p>
<p class="code"><code class="ruby">def will_paginate_remote(paginator, options={})<br />
&nbsp;&nbsp;update = options.delete(:update)<br />
&nbsp;&nbsp;url = options.delete(:url)<br />
&nbsp;&nbsp;str = will_paginate(paginator, options)<br />
&nbsp;&nbsp;if str != nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;str.gsub(/href="(.*?)"/) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"href=\"#\" onclick=\"new Ajax.Updater('" + update + "', '" + (url ? url + $1.sub(/[^\?]*/, '') : $1) +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"', {asynchronous:true, evalScripts:true, method:'get',}); return false;\""<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p>2. 在view中调用will_paginate_remote：</p>
<p class="code"><code class="ruby">will_paginate_remote(feeds, :param_name =&gt; 'feed_page', :update=&gt;'feed-list', :url=&gt;"/feeds/list")</code></p>
<p>那个URL参数是我加的，因为有时候可能请求不是发给当前页，<a href="http://wiki.rubyonrails.org/rails/pages/How+to+Paginate+With+Ajax">原文</a>还提供了其它几种方法，我觉得这个不错，比较简单。</p>
<p><strong>更新：感谢Raeboo，发现了一个多page参数的Bug，新代码已解决此问题。</strong></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Ajax Rating: 简易打分插件" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Ajax Rating: 简易打分插件</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="select层叠的AJAX实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251431.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">select层叠的AJAX实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="自定义will_paginage输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fcustom-will-paginate-renderer%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">自定义will_paginage输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="db:migrate简明指南" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251550.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">db:migrate简明指南</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/07-10-25-ajax-will-paginate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RJS实现Select级联</title>
		<link>http://www.letrails.cn/archives/65/</link>
		<comments>http://www.letrails.cn/archives/65/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 08:51:30 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JS]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/65</guid>
		<description><![CDATA[还记得前面的那个Ajax Select的例子吗？实际上实现像国家，城市这样option已经确定的select的级联并没有必要使用Ajax，通过客户端JS就可以轻松实现，而不必向服务端发送请求。 1. 生成person resource script/generate person country:string state:string 由于不再需要向服务端发送请求，因此没有必要生成一个单独的city resource。 2. 执行rake db:migrate 3. 修改app/views/layouts/people.rhtml，包含prototype： &#60;%= javascript_include_tag 'prototype' %&#62; 4. 修改app/views/people/new.rhtml: &#60;%= update_page_tag do &#124;page&#124; &#160;&#160; page &#60;&#60; "function change_state(country_value) {" &#160;&#160;&#160;&#160;page &#60;&#60; 'if(country_value == "United States")' &#160;&#160;&#160;&#160;&#160;&#160;page['person_state'].replace_html options_for_select(US_STATES) &#160;&#160;&#160;&#160;page &#60;&#60; 'else if(country_value == "China")' &#160;&#160;&#160;&#160;&#160;&#160;page['person_state'].replace_html options_for_select(CHINA_STATES) &#160;&#160;&#160;&#160;page &#60;&#60; 'else' &#160;&#160;&#160;&#160;page['person_state'].replace_html options_for_select([['Not applicable', '']]) [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="city_helper: 省市二级联动Select插件" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fcity-helper-a-plugin-provide-state-and-city-select%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">city_helper: 省市二级联动Select插件</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="select层叠的AJAX实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251431.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">select层叠的AJAX实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="db:migrate简明指南" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251550.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">db:migrate简明指南</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="God: Monit的Ruby实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F46%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251661.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">God: Monit的Ruby实现</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>还记得前面的那个<a href="http://www.letrails.cn/archives/35">Ajax Select的例子</a>吗？实际上实现像国家，城市这样option已经确定的select的级联并没有必要使用Ajax，通过客户端JS就可以轻松实现，而不必向服务端发送请求。</p>
<p>1. 生成person resource</p>
<p class="code"><code>script/generate person country:string state:string</code></p>
<p>由于不再需要向服务端发送请求，因此没有必要生成一个单独的city resource。</p>
<p>2. 执行rake db:migrate<br />
3. 修改app/views/layouts/people.rhtml，包含prototype：</p>
<p class="code"><code class="ruby">&lt;%= javascript_include_tag <span class="string">'prototype'</span> %&gt;</code></p>
<p>4. 修改app/views/people/new.rhtml:</p>
<p class="code"><code class="ruby">&lt;%= update_page_tag do |page|<br />
&nbsp;&nbsp; page &lt;&lt; "function change_state(country_value) {"<br />
&nbsp;&nbsp;&nbsp;&nbsp;page &lt;&lt; 'if(country_value == "United States")'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page['person_state'].replace_html options_for_select(US_STATES)<br />
&nbsp;&nbsp;&nbsp;&nbsp;page &lt;&lt; 'else if(country_value == "China")'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page['person_state'].replace_html options_for_select(CHINA_STATES)<br />
&nbsp;&nbsp;&nbsp;&nbsp;page &lt;&lt; 'else'<br />
&nbsp;&nbsp;&nbsp;&nbsp;page['person_state'].replace_html options_for_select([['Not applicable', '']])<br />
&nbsp;&nbsp;page &lt;&lt; "}"<br />
end<br />
%&gt;<br />
&lt;p&gt;<br />
&nbsp;&nbsp;&lt;b&gt;Country&lt;/b&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&lt;%= f.country_select :country, ['China', 'United States'], {:selected=&gt;'China'},<br />
&nbsp;&nbsp;&nbsp;&nbsp; <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange =&gt; 'change_state(this.options[this.selectedIndex].value)'<br />
%&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&nbsp;&nbsp;&lt;b&gt;States&lt;/b&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&lt;%= f.select :state, CHINA_STATES %&gt;<br />
&lt;/p&gt;</code></p>
<p>相比于上一篇，new.rhtml的改动还是比较大的：</p>
<ul>
<li>我们使用country_select来自动生成国家select</li>
<li> <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange方法现在指向本地的JS函数change_state，而非remote_function生成的一个AJAX函数。</li>
<li>change_state函数没有向服务器发送请求，它在本地保存了所有支持国家的省份信息</li>
</ul>
<p>5. 当然，我们需要定义两个名为US_STATES和CHINA_STATES的常量来保存两个国家的省份信息：</p>
<p class="code"><code class="ruby">US_STATES = [["Please select", ""], [ "Alabama", "AL" ], [ "Alaska", "AK" ], ..........<br />
CHINA_STATES = [["Please select", ""], [ "Beijing", "BJ" ], [ "Shanghai", "SH" ], ..........</code></p>
<p>6. 默认：</p>
<p id="n5:w" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_170g8r4r3hq" style="width: 293px; height: 246px" /></p>
<p>7. 选择United States:</p>
<p id="ws_z" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_171dfrcpz4m" style="width: 291px; height: 196px" /></p>
<p>8. 选择其他国家：</p>
<p id="m1_t" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_172hfcfvsck" style="width: 288px; height: 137px" /></p>
<p>参考：</p>
<ul>
<li><a href="http://onrails.org/articles/2006/01/12/rjs-and-link_to_function"> .rjs and link_to_function</a></li>
<li><a href="http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html">Rails API参考</a></li>
</ul>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="4"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="city_helper: 省市二级联动Select插件" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fcity-helper-a-plugin-provide-state-and-city-select%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">city_helper: 省市二级联动Select插件</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="select层叠的AJAX实现" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251431.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">select层叠的AJAX实现</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Aptana IDE: 全新开源Ruby+Rails+JavaScript+HTML工作台" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F7%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251499.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Aptana IDE: 全新开源Ruby+Rails+JavaScript+HTML工作台</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="db:migrate简明指南" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/03/08/3251550.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">db:migrate简明指南</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="4" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/65/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>select层叠的AJAX实现</title>
		<link>http://www.letrails.cn/archives/35/</link>
		<comments>http://www.letrails.cn/archives/35/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 14:08:19 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[指南]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/35</guid>
		<description><![CDATA[假设我们有两个select，子select的内容需要随父select而动态改变，这篇指南将向你演示如何实现AJAX方式的select层叠： 1. 创建三个资源：country，city，person ruby script/generate scaffold_resource country name:strin ruby script/generate scaffold_resource city country_id:int name:string ruby script/generate scaffold_resource person country_id:int city_id:int name:string 2. 执行rake db:migrate 3. 修改app/views/layouts/people.rhtml，包含prototype： &#60;%= javascript_include_tag 'prototype' %&#62; 4. 修改app/views/people/new.rhtml: &#60;p&#62; &#160;&#160;&#60;b&#62;Country&#60;/b&#62;&#60;br /&#62; &#160;&#160;&#60;%= f.select (:country_id, Country.find_all.collect {&#124;c&#124; [ c.name, c.id ] }, &#160;&#160;&#160;&#160;{ :include_blank =&#62; true }, &#160;&#160;&#160;&#160; nchange =&#62; remote_function(:update =&#62; [...]<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">AJAX分页(paginate)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ajax Rating: 简易打分插件</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fcity-helper-a-plugin-provide-state-and-city-select%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">city_helper: 省市二级联动Select插件</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">RJS实现Select级联</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>假设我们有两个select，子select的内容需要随父select而动态改变，这篇指南将向你演示如何实现AJAX方式的select层叠：</p>
<p>1. 创建三个资源：country，city，person</p>
<p class="code"><code>ruby script/generate scaffold_resource country name:strin<br />
ruby script/generate scaffold_resource city country_id:int name:string<br />
ruby script/generate scaffold_resource person country_id:int city_id:int name:string</code></p>
<p>2. 执行rake db:migrate<br />
3. 修改app/views/layouts/people.rhtml，包含prototype：</p>
<p class="code"><code class="ruby">&lt;%= javascript_include_tag 'prototype' %&gt;</code></p>
<p>4. 修改app/views/people/new.rhtml:</p>
<p class="code"><code class="ruby">&lt;p&gt;<br />
&nbsp;&nbsp;&lt;b&gt;Country&lt;/b&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&lt;%= f.select (:country_id, Country.find_all.collect {|c| [ c.name, c.id ] },<br />
&nbsp;&nbsp;&nbsp;&nbsp;{ :include_blank =&gt; true },<br />
&nbsp;&nbsp;&nbsp;&nbsp; <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange =&gt; remote_function(:update =&gt; "cities",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :method =&gt; "get",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :with =&gt; "'country_id=' + value + '&amp;partial=select'",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :url =&gt; { :controller =&gt; :cities,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :action =&gt; :index}))<br />
&nbsp;&nbsp;%&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&nbsp;&nbsp;&lt;b&gt;City&lt;/b&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&lt;div id="cities"&gt;<br />
&nbsp;&nbsp;&lt;%= f.select (:city_id, []) %&gt;<br />
&nbsp;&nbsp;&lt;/div&gt;<br />
&lt;/p&gt;</code></p>
<p>这段代码为country select定义了onchange函数，它会在country select的选择项变化时重新请求cities/index，并更新city select。</p>
<p>5. 现在打开http://localhost:3000/people/new，你会看到：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_116hjckftdh" /></p>
<p>6. 但是别着急，工作还没完成，cities/index并不会自动帮你返回一个select，因此我们需要修改cities_controller的index方法：</p>
<p class="code"><code class="ruby">def index<br />
&nbsp;&nbsp;if params[:country_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@cities = City.find(:all, :conditions =&gt; ["country_id = ?", params[:country_id]])<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;@cities = City.find(:all)<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;respond_to do |format|<br />
&nbsp;&nbsp;&nbsp;&nbsp;format.html { render :partial =&gt; params[:partial]}<br />
&nbsp;&nbsp;&nbsp;&nbsp;format.xml  { render <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' /> ml =&gt; @districts.to_xml }<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p>现在，index action会根据:country_id参数返回指定国家的城市，并根据partial参数来决定如何对数据进行渲染：</p>
<p class="code"><code class="ruby">format.html { render :partial =&gt; params[:partial]}</code></p>
<p>要将结果渲染为一个select，我们需要定义_select.rhtml，它很简单：</p>
<p class="code"><code class="ruby">&lt;%= select(:person, :city_id, @cities.collect {|c| [c.name, c.id]}) %&gt;</code></p>
<p>7. 一切搞掂，现在再次打开http://localhost:3000/people/new，选择中国，你会发现，city select已经跟随你的选择而动态更新了：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_117f9hfkccs" /></p>
<p>8. 很简单，但是还有个问题需要说明，由于IE不支持替换select的innerHTML，因此我们在_select.rhtml中返回了整个 select（本来应该只要options就足够了），注意select的第一个参数是:people，也就是说这个select将只能够为 people/new工作，如果你想要让_select.rhtml更通用些，那就需要再增加一个参数（比如owner)来充当select的第一个参 数。（完）</p>
<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">无觅猜您也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F07-10-25-ajax-will-paginate%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">AJAX分页(paginate)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fajax-rating-plugin%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ajax Rating: 简易打分插件</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fcity-helper-a-plugin-provide-state-and-city-select%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">city_helper: 省市二级联动Select插件</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F65%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F35%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">RJS实现Select级联</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/35/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

