<?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; 数据库</title>
	<atom:link href="http://www.letrails.cn/archives/category/%e6%95%b0%e6%8d%ae%e5%ba%93/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>使用SQLite in memory提高测试代码效率</title>
		<link>http://www.letrails.cn/archives/55/</link>
		<comments>http://www.letrails.cn/archives/55/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 16:21:01 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[性能]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[测试]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/55</guid>
		<description><![CDATA[对于需要进行持续集成的大型项目来说，运行测试代码的花费就显得尤为重要，Chris Roos在这篇帖子里介绍了一种通过使用SQLite数据库来 提高测试代码运行效率的方法。 首先你需要安装SQLite3以及sqlite3-ruby gem，然后修改database.yml： test: adapter: sqlite3 database: ":memory:" 但是这样有一个问题，由于SQLite数据库保存在内存中，因此必须在每次执行单元测试之前首先生成数据库的大纲，不过不用担心，Chris Roos已经提供了一段现成的代码，将它加到你的environment.rb就可以了： def in_memory_database? &#160;&#160;ENV["RAILS_ENV"] == "test" and &#160;&#160;ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLite3Adapter and &#160;&#160;Rails::Configuration.new.database_configuration['test']['database'] == ':memory:' end if in_memory_database? &#160;&#160;puts "creating sqlite in memory database" &#160;&#160;load "#{RAILS_ROOT}/db/schema.rb" # use db agnostic schema by default &#160;&#160;# ActiveRecord::Migrator.up('db/migrate') # use migrations end 不过要注意，以上代码最好加在”# Include your application configuration below”这一行之后，因为说不准后面的配置有可能就会用到数据库。 [...]<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="使用Flog测试你的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%2F62%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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/3251517.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;">使用Flog测试你的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="Bash提示符显示Git分支" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fshow-git-branch-in-bash-prompt%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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/05/15/8702104.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;">Bash提示符显示Git分支</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="Xapian，Sphinx在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%2Fxapian-vs-sphinx-in-rails%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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;">Xapian，Sphinx在Rails中的性能比较</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="rcov: 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%2F51%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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/3251581.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;">rcov: 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://lilac.greatweb.cn/rails/wp-admin/post-new.php">对于需要进行持续集成的大型项目来说，运行测试代码的花费就显得尤为重要，</a><a href="http://blog.seagul.co.uk/" title="Chris Roos" id="qlfp">Chris Roos</a>在<a href="http://blog.seagul.co.uk/articles/2006/02/08/in-memory-sqlite-database-for-rails-testing" title="这篇帖子里" id="di-q">这篇帖子里</a>介绍了一种通过使用SQLite数据库来 提高测试代码运行效率的方法。</p>
<p>首先你需要安装<a href="http://www.sqlite.org/download.html" title="SQLite3" id="yh2a">SQLite3</a>以及sqlite3-ruby gem，然后修改database.yml：</p>
<p class="code"><code class="ruby">test:<br />
adapter: sqlite3<br />
database: ":memory:"</code></p>
<p>但是这样有一个问题，由于SQLite数据库保存在内存中，因此必须在每次执行单元测试之前首先生成数据库的大纲，不过不用担心，<a href="http://blog.seagul.co.uk/" title="Chris Roos" id="qlfp">Chris Roos</a>已经提供了一段现成的代码，将它加到你的environment.rb就可以了：</p>
<p class="code"><code class="ruby"><br />
def in_memory_database?<br />
&nbsp;&nbsp;ENV["RAILS_ENV"] == "test" and<br />
&nbsp;&nbsp;ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLite3Adapter and<br />
&nbsp;&nbsp;Rails::Configuration.new.database_configuration['test']['database'] == ':memory:'<br />
end<br />
if in_memory_database?<br />
&nbsp;&nbsp;puts "creating sqlite in memory database"<br />
&nbsp;&nbsp;load "#{RAILS_ROOT}/db/schema.rb" # use db agnostic schema by default<br />
&nbsp;&nbsp;#  ActiveRecord::Migrator.up('db/migrate') # use migrations<br />
end</code></p>
<p>不过要注意，以上代码最好加在”# Include your application configuration below”这一行之后，因为说不准后面的配置有可能就会用到数据库。</p>
<p>这段代码使用db/schema.rb来初始化数据库，因此你最好先执行下面这条命令，以保证schema.rb与数据库保持同步(当然你也可以使用db:migrate)：</p>
<p class="code"><code class="ruby">rake db:migrate:dump</code></p>
<p>现在在执行下rake test，看看速度是不是快了不少，下面是我找的一个小测试程序的运行结果：</p>
<p>sqlite in memory:<br />
unit tests: 0.14s<br />
functional tests: 0.59s</p>
<p>mysql:<br />
unit tests: 1.16s<br />
functional tests: 1.81s</p>
<p>如果你觉得这样还是有些麻烦，不要紧，<a href="http://nubyonrails.com/">Geoffrey Grosenbach</a>已经为你准备好了一个<a href="http://nubyonrails.com/articles/2006/06/01/san-francisco-sqlite3-memory-tests-asteroids" title="插件" id="j44:">插件</a>，你只需要动手改一下database.yml就成了。</p>
<p><strong>更新：如果不想每次都看到那一堆数据库创建信息，那么只需在加载schema.rb之前，将ActiveRecord::Schema.verbose置为false即可：</strong></p>
<p class="code"><code class="ruby">if in_memory_database?<br />
&nbsp;&nbsp;verbose = ActiveRecord::Schema.verbose<br />
&nbsp;&nbsp;ActiveRecord::Schema.verbose = false<br />
&nbsp;&nbsp;puts "creating sqlite in memory database"<br />
&nbsp;&nbsp;load "#{RAILS_ROOT}/db/schema.rb" # use db agnostic schema by default<br />
&nbsp;&nbsp;ActiveRecord::Schema.verbose = verbose<br />
end</code></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="使用Flog测试你的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%2F62%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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/3251517.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;">使用Flog测试你的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="Bash提示符显示Git分支" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fshow-git-branch-in-bash-prompt%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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/05/15/8702104.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;">Bash提示符显示Git分支</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="Xapian，Sphinx在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%2Fxapian-vs-sphinx-in-rails%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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;">Xapian，Sphinx在Rails中的性能比较</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="rcov: 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%2F51%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F55%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/3251581.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;">rcov: 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>]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/55/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails插件: Annotate models</title>
		<link>http://www.letrails.cn/archives/53/</link>
		<comments>http://www.letrails.cn/archives/53/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 11:48:35 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[插件]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/53</guid>
		<description><![CDATA[简介 Annotate models能够以注释的方式在Model顶部自动生成此Model的大纲（schema）信息，并可以在Model的大纲发生变化后自动更新。 对于拥有许多Model的大型项目来说，在Model相关文件中维护此model的大纲信息就显得尤为重要，你不需要去db/migrate目录下搜寻此 Model相关的Migration文件，也不需要去mysql中敲describe XXX命令，就可以迅速了解此Model对应的表拥有那些字段。 作者：Dave Thomas SVN仓库：http://repo.pragprog.com/svn/Public/plugins/annotate_models 许可：Ruby License 安装 $ ./script/plugin install http://repo.pragprog.com/svn/Public/plugins/annotate_models 使用 $ rake annotate_models 这将会在所有Model文件及Fixture文件的头部添加此Model的大纲信息，添加的大纲信息看起来是下面这个样子： # == Schema Information # Schema version: 1 # # Table name: users # # id :integer(11) not null, primary key # login :string(255) # email :string(255) # crypted_password :string(40) # salt :string(40) # [...]<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="升级到Rails 3 Beta" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fupgrade-to-rails-3-beta%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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;">升级到Rails 3 Beta</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%2Frails-performance-optimization-guide%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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/3251308.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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Shanghai on 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%2Fshanghai-on-rails-event-oct-20%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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/05/18/8865598.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;">Shanghai on Rails线下活动</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 Templates" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Frails-templates%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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;">Rails Templates</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><span style="font-weight: bold">简介</span></p>
<p>Annotate models能够以注释的方式在Model顶部自动生成此Model的大纲（schema）信息，并可以在Model的大纲发生变化后自动更新。</p>
<p>对于拥有许多Model的大型项目来说，在Model相关文件中维护此model的大纲信息就显得尤为重要，你不需要去db/migrate目录下搜寻此 Model相关的Migration文件，也不需要去mysql中敲describe XXX命令，就可以迅速了解此Model对应的表拥有那些字段。</p>
<p><span style="font-weight: bold">作者：</span><a href="http://agilewebdevelopment.com/plugins/owner/7">Dave Thomas</a><br />
<span style="font-weight: bold">SVN仓库：</span><a href="http://repo.pragprog.com/svn/Public/plugins/annotate_models">http://repo.pragprog.com/svn/Public/plugins/annotate_models</a><br />
<span style="font-weight: bold">许可：</span><a href="http://www.ruby-lang.org/en/about/license.txt/" title="Ruby License" id="vv13">Ruby License</a></p>
<p><span style="font-weight: bold">安装</span></p>
<p class="code"><code>$ ./script/plugin install http://repo.pragprog.com/svn/Public/plugins/annotate_models</code></p>
<p><span style="font-weight: bold">使用</span></p>
<p class="code"><code>$ rake annotate_models</code></p>
<p>这将会在所有Model文件及Fixture文件的头部添加此Model的大纲信息，添加的大纲信息看起来是下面这个样子：</p>
<p class="code"><code class="ruby"># == Schema Information<br />
# Schema version: 1<br />
#<br />
# Table name: users<br />
#<br />
#  id                        :integer(11)   not null, primary key<br />
#  login                     :string(255)<br />
#  email                     :string(255)<br />
#  crypted_password          :string(40)<br />
#  salt                      :string(40)<br />
#  created_at                :datetime<br />
#  updated_at                :datetime<br />
#  remember_token            :string(255)<br />
#  remember_token_expires_at :datetime<br />
#  activation_code           :string(40)<br />
#  activated_at              :datetime<br />
#</code></p>
<p>觉得这个插件不错？那就<a href="http://agilewebdevelopment.com/plugins/annotate_models" title="去这里为它投上一票吧" id="mm7b">去这里为它投上一票吧</a>！</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="升级到Rails 3 Beta" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fupgrade-to-rails-3-beta%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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;">升级到Rails 3 Beta</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%2Frails-performance-optimization-guide%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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/3251308.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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Shanghai on 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%2Fshanghai-on-rails-event-oct-20%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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/05/18/8865598.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;">Shanghai on Rails线下活动</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 Templates" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Frails-templates%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F53%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;">Rails Templates</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/53/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>has_many_polymorphs：简化多对多映射</title>
		<link>http://www.letrails.cn/archives/49/</link>
		<comments>http://www.letrails.cn/archives/49/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 09:46:32 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[插件]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/49</guid>
		<description><![CDATA[简介 假设我们要开发一个教学系统，那么老师和学生必然是系统不可缺少的两个model，要建立他们之间的映射，我们的数据库可能看起来是下面这个样子： 但是随着系统的开发，我们发现还需要将课程管理也纳入进来，于是数据库就变成了这个样子： 但是这样的数据库模型明显的不够DRY，因为teachers_students和teachers_courses两个表不但字段相似，完成的功能也是相同的，那么可不可以将它们合并呢？ 答案是：可以。 使用evan weaver的has_many_polymorphs插件可以很轻松的完成这个任务。 安装 $ script/plugin install -x svn://rubyforge.org/var/svn/fauna/has_many_polymorphs/trunk 使用 对于上例，应用has_many_polymorphs后，我们的数据库看起来是这个样子： 修改app/models/teacher.rb class Teaching &#60; ActiveRecord::Base &#160;&#160;belongs_to :teacher &#160;&#160;belongs_to :teachable, polymorphic =&#62; trues end class Teacher &#60; ActiveRecord::Base &#160;&#160;has_many_polymorphs :teachables, &#160;&#160;&#160;&#160; :from =&#62; [:students, :courses], &#160;&#160;&#160;&#160; :through =&#62; :teachings end 这就搞定了，不需要修改student.rb和course.rb，现在你可以这样使用teacher了： teacher.teachables # 老师教授的所有课程及学生 teacher.students # 老师教授的所有学生 teacher.courses # 老师教授的所有课程 teacher.students[0].teacher [...]<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="使用Flog测试你的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%2F62%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/3251517.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;">使用Flog测试你的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%2F49%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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="JRuby Inside上线" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F37%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/3251518.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;">JRuby Inside上线</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="Shanghai on Rails 7.26活动照片，PPT及视频" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fshanghai-on-rails-726-meeting-picture-presentation-videos%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/05/18/8798467.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;">Shanghai on Rails 7.26活动照片，PPT及视频</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><strong>简介</strong></p>
<p>假设我们要开发一个教学系统，那么老师和学生必然是系统不可缺少的两个model，要建立他们之间的映射，我们的数据库可能看起来是下面这个样子：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_136z2rxnvf4" /></p>
<p>但是随着系统的开发，我们发现还需要将课程管理也纳入进来，于是数据库就变成了这个样子：</p>
<p class="img"><img src="http://docs.google.com/File?id=ahxzccrw5xq_139f5336rhn" /></p>
<p>但是这样的数据库模型明显的不够DRY，因为teachers_students和teachers_courses两个表不但字段相似，完成的功能也是相同的，那么可不可以将它们合并呢？</p>
<p>答案是：可以。</p>
<p>使用<a href="http://blog.evanweaver.com/">evan weaver</a>的<a href="http://blog.evanweaver.com/files/doc/fauna/has_many_polymorphs/files/README.html">has_many_polymorphs</a>插件可以很轻松的完成这个任务。</p>
<p><strong>安装</strong></p>
<p class="code"><code>$ script/plugin install -x svn://rubyforge.org/var/svn/fauna/has_many_polymorphs/trunk</code></p>
<p><strong>使用</strong></p>
<p>对于上例，应用has_many_polymorphs后，我们的数据库看起来是这个样子：</p>
<p class="img"><img src="http://docs.google.com/File?id=ahxzccrw5xq_140f4tbm9c7" /></p>
<p>修改app/models/teacher.rb</p>
<p class="code"><code class="ruby">class Teaching &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;belongs_to :teacher<br />
&nbsp;&nbsp;belongs_to :teachable, polymorphic =&gt; trues<br />
end<br />
class Teacher &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;has_many_polymorphs :teachables,<br />
&nbsp;&nbsp;&nbsp;&nbsp; :from =&gt; [:students, :courses],<br />
&nbsp;&nbsp;&nbsp;&nbsp; :through =&gt; :teachings<br />
end</code></p>
<p>这就搞定了，不需要修改student.rb和course.rb，现在你可以这样使用teacher了：</p>
<p class="code"><code class="ruby">teacher.teachables    # 老师教授的所有课程及学生<br />
teacher.students       # 老师教授的所有学生<br />
teacher.courses        # 老师教授的所有课程<br />
teacher.students[0].teacher # 老师自己</code></p>
<p>更多信息请参看<a href="http://blog.evanweaver.com/files/doc/fauna/has_many_polymorphs/files/README.html">使用手册</a>。</p>
<p>数据库模型图使用<a href="http://fabforce.net/dbdesigner4/">DbDesigner</a>绘制。</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="Rails插件： RAV" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F56%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/3251650.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插件： RAV</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="Shanghai on Rails 7.26活动照片，PPT及视频" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fshanghai-on-rails-726-meeting-picture-presentation-videos%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/05/18/8798467.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;">Shanghai on Rails 7.26活动照片，PPT及视频</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="RailsLogVisualizer现在支持Windows" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F32%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/3251814.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;">RailsLogVisualizer现在支持Windows</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="REST on Rails指南4：路由" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F10%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F49%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/08/15/22889171.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;">REST on Rails指南4：路由</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/49/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sequel：轻量级的Ruby ORM库</title>
		<link>http://www.letrails.cn/archives/43/</link>
		<comments>http://www.letrails.cn/archives/43/#comments</comments>
		<pubDate>Sat, 28 Jul 2007 04:56:12 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[插件]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/43</guid>
		<description><![CDATA[简介 Sequel是一个轻量级的Ruby ORM程序库，支持线程安全，连接池，同时还提供了一个简洁的DSL来操作数据库。 如何你只是想写一个简单的纯Ruby的数据库应用，而不想同庞大的ActiveRecord发生关系，那么Sequel为你提供了另外一个选择。 Sequel目前支持SQLite3, PostgreSQL, MySQL, ODBC以及DBI。 作者： ciconia 项目主页：http://code.google.com/p/ruby-sequel/ 文档： http://sequel.rubyforge.org/ 最新版本：0.1.8 安装 gem install sequel 使用 1. 打开数据库 DB = Sequel('sqlite:///my_blog.db') DB = Sequel('postgres://user:password@localhost/my_db') DB = Sequel('mysql://user:password@localhost/my_db') 2.创建表 DB.create_table :items do # Create a new table &#160;&#160;column :name, :text &#160;&#160;column :price, :float end 3. 获取记录 items = DB[:items] 4. 添加记录 items &#60;&#60; [...]<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%2Fruby-1-9-released%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ruby 1.9正式发布</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%2Fruby-metaclass-tutorials%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ruby Metaclass详解</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%2Fwriting-efficient-ruby-code-review%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Writing Efficient Ruby Code Short Cut</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%2F3-ruby-tips%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ruby技巧3则</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><strong>简介</strong></p>
<p>Sequel是一个轻量级的Ruby ORM程序库，支持线程安全，连接池，同时还提供了一个简洁的DSL来操作数据库。</p>
<p>如何你只是想写一个简单的纯Ruby的数据库应用，而不想同庞大的ActiveRecord发生关系，那么Sequel为你提供了另外一个选择。</p>
<p>Sequel目前支持SQLite3, PostgreSQL, MySQL, ODBC以及DBI。</p>
<p><strong>作者：</strong>    <a href="http://code.google.com/u/ciconia/">ciconia</a><br />
<strong>项目主页：</strong><a href="http://code.google.com/p/ruby-sequel/" title="http://code.google.com/p/ruby-sequel/">http://code.google.com/p/ruby-sequel/</a><br />
<strong>文档：</strong>    <a href="http://sequel.rubyforge.org/" title="http://sequel.rubyforge.org/">http://sequel.rubyforge.org/</a><br />
<strong>最新版本：</strong>0.1.8</p>
<p><strong>安装</strong></p>
<p class="code"><code class="ruby">gem install sequel</code></p>
<p><strong>使用</strong></p>
<p>1. 打开数据库</p>
<p class="code"><code class="ruby">DB = Sequel('sqlite:///my_blog.db')<br />
DB = Sequel('postgres://user:password@localhost/my_db')<br />
DB = Sequel('mysql://user:password@localhost/my_db')</code></p>
<p>2.创建表</p>
<p class="code"><code class="ruby">DB.create_table :items do # Create a new table<br />
&nbsp;&nbsp;column :name, :text<br />
&nbsp;&nbsp;column :price, :float<br />
end</code></p>
<p>3. 获取记录</p>
<p class="code"><code class="ruby">items = DB[:items]</code></p>
<p>4. 添加记录</p>
<p class="code"><code class="ruby">items &lt;&lt; {:name =&gt; 'abc', :price =&gt; rand * 100}<br />
items &lt;&lt; {:name =&gt; 'def', :price =&gt; rand * 100}<br />
items &lt;&lt; {:name =&gt; 'ghi', :price =&gt; rand * 100}</code></p>
</ul>
<p>更多信息请参看这张<a href="http://code.google.com/p/ruby-sequel/wiki/CheatSheet" title="作弊小抄（CheatSheet）">作弊小抄（CheatSheet）。</a></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%2Fruby-1-9-released%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ruby 1.9正式发布</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%2Fruby-metaclass-tutorials%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ruby Metaclass详解</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%2Fwriting-efficient-ruby-code-review%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Writing Efficient Ruby Code Short Cut</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%2F3-ruby-tips%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F43%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Ruby技巧3则</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/43/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Rails中创建多对多映射</title>
		<link>http://www.letrails.cn/archives/34/</link>
		<comments>http://www.letrails.cn/archives/34/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 14:51:55 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[指南]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/34</guid>
		<description><![CDATA[AWDwR 有一个小节讲到了如何创建多对多映射，不过使用db:migrate使得这个过程变得更为简单，这是来自thembid.com 的一篇指南，原文在这里 。 为了让例子更容易理解一些，我修改了原文的两个表名，并使用了scaffold_resource替代了model，同时在最后给出了两个截图。这里我使用book和author来作为演示的resource，一本书可以有多个作者，一个作者也可能写了多本书，因此，作者和书属于多对多的关系。 首先，让我们创建resource： ruby script/generate scaffold_resource book title:string ruby script/generate scaffold_resource authors name:string 然后，我们为创建映射关系表： ruby script/generate migration create_authors_books 编辑db/migrate/003_create_authors_books.rb： class CreateAuthorsBooks < ActiveRecord::Migration &#160;&#160;def self.up &#160;&#160;&#160;&#160;create_table :authors_books, :id => false do &#124;t&#124; &#160;&#160;&#160;&#160;&#160;&#160;t.column :author_id, :integer &#160;&#160;&#160;&#160;&#160;&#160;t.column :book_id, :integer &#160;&#160;&#160;&#160;end &#160;&#160;&#160;&#160;add_index :authors_books, [:author_id, :book_id] &#160;&#160;&#160;&#160;add_index :authors_books, [:book_id] &#160;&#160;end &#160;&#160;def self.down &#160;&#160;&#160;&#160;remove_index :authors_books, [:book_id] [...]<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="升级到Rails 3 Beta" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fupgrade-to-rails-3-beta%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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;">升级到Rails 3 Beta</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%2Frails-performance-optimization-guide%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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/3251308.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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Rails 2.1 时区简介" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Frails-2-1-timezone-tutorials%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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;">Rails 2.1 时区简介</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="Shanghai on Rails 7.26线下活动" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fshanghai-on-rails-726-meeting%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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/09/3251440.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;">Shanghai on Rails 7.26线下活动</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.google.com/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.pragmaticprogrammer.com%2Ftitles%2Frails%2F&amp;ei=B2GSRoGhDo3gsALy1fGeCA&amp;usg=AFQjCNF_eSYJT0SHfJxujjLtJo9FvWvBVg&amp;sig2=M-7oVdSCgMHKoYnzkR4r-A" title="AWDwR">AWDwR</a> 有一个小节讲到了如何创建多对多映射，不过使用db:migrate使得这个过程变得更为简单，这是来自<a href="http://blog.thembid.com/" title="thembid.com">thembid.com</a> 的一篇指南，原文在<a href="http://blog.thembid.com/index.php/2007/07/07/how-to-create-many-to-many-relationships-in-ruby-on-rails/" title="这里">这里</a> 。</p>
<p>为了让例子更容易理解一些，我修改了原文的两个表名，并使用了scaffold_resource替代了model，同时在最后给出了两个截图。这里我使用book和author来作为演示的resource，一本书可以有多个作者，一个作者也可能写了多本书，因此，作者和书属于多对多的关系。</p>
<p>首先，让我们创建resource：</p>
<p class="code"><code>ruby script/generate scaffold_resource book title:string<br />
ruby script/generate scaffold_resource authors name:string</code></p>
<p>然后，我们为创建映射关系表：</p>
<p class="code"><code>ruby script/generate migration create_authors_books</code></p>
<p>编辑db/migrate/003_create_authors_books.rb：</p>
<p class="code"><code class="ruby">class CreateAuthorsBooks < ActiveRecord::Migration<br />
&nbsp;&nbsp;def self.up<br />
&nbsp;&nbsp;&nbsp;&nbsp;create_table :authors_books, :id => false do |t|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :author_id, :integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :book_id,  :integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;add_index :authors_books, [:author_id, :book_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;add_index :authors_books, [:book_id]<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;def self.down<br />
&nbsp;&nbsp;&nbsp;&nbsp;remove_index :authors_books, [:book_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;remove_index :authors_books, [:author_id, :book_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;drop_table :authors_books<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p>执行db:migrate，我们可以看到数据库中多了3个表：books, authors, books_authors。</p>
<p>修改app/models/book.rb：</p>
<p class="code"><code class="ruby">class Book &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;has_and_belongs_to_many :authors<br />
end</code></p>
<p>修改app/models/author.rb:</p>
<p class="code"><code class="ruby">class Author &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;has_and_belongs_to_many :books<br />
end</code></p>
<p>这就搞定了，不过为了照顾喜欢看截图的群众，这里还是准备了几张图：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_112gb8tnwd8" /></p>
<p>修改app/views/books/index.rhtml:</p>
<p class="code"><code class="ruby">&lt;td&gt;&lt;%=h book.title %&gt; (<br />
&nbsp;&nbsp;&lt;% for author in book.authors %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;%= author.name %&gt;&nbsp;<br />
&nbsp;&nbsp;&lt;% end %&gt;<br />
)&lt;/td&gt;</code></p>
<p>现在，books/index变成了这样，每本书的后面都有了作者信息（当然你首先需要在authors_books表中添加作者和书的映射关系）：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_114cjhf9bfr" /></p>
<p>如果愿意，你也可以修改authors/index.rhtml，在每个作者后面显示他的作品。</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="升级到Rails 3 Beta" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fupgrade-to-rails-3-beta%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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;">升级到Rails 3 Beta</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%2Frails-performance-optimization-guide%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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/3251308.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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Rails 2.1 时区简介" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Frails-2-1-timezone-tutorials%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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;">Rails 2.1 时区简介</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="Shanghai on Rails 7.26线下活动" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fshanghai-on-rails-726-meeting%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F34%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/09/3251440.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;">Shanghai on Rails 7.26线下活动</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/34/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>db:migrate简明指南</title>
		<link>http://www.letrails.cn/archives/33/</link>
		<comments>http://www.letrails.cn/archives/33/#comments</comments>
		<pubDate>Sat, 07 Jul 2007 13:18:58 +0000</pubDate>
		<dc:creator>Yuanyi ZHANG</dc:creator>
				<category><![CDATA[指南]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/33</guid>
		<description><![CDATA[AWDwR 有一个小节讲到了如何创建多对多映射，不过使用db:migrate使得这个过程变得更为简单，这是来自thembid.com 的一篇指南，原文在这里 。 为了让例子更容易理解一些，我修改了原文的两个表名，并使用了scaffold_resource替代了model，同时在最后给出了两个截图。这里我使用book和author来作为演示的resource，一本书可以有多个作者，一个作者也可能写了多本书，因此，作者和书属于多对多的关系。 首先，让我们创建resource： ruby script/generate scaffold_resource book title:string ruby script/generate scaffold_resource authors name:string 然后，我们为创建映射关系表： ruby script/generate migration create_authors_books 编辑db/migrate/003_create_authors_books.rb： class CreateAuthorsBooks < ActiveRecord::Migration &#160;&#160;def self.up &#160;&#160;&#160;&#160;create_table :authors_books, :id => false do &#124;t&#124; &#160;&#160;&#160;&#160;&#160;&#160;t.column :author_id, :integer &#160;&#160;&#160;&#160;&#160;&#160;t.column :book_id, :integer &#160;&#160;&#160;&#160;end &#160;&#160;&#160;&#160;add_index :authors_books, [:author_id, :book_id] &#160;&#160;&#160;&#160;add_index :authors_books, [:book_id] &#160;&#160;end &#160;&#160;def self.down &#160;&#160;&#160;&#160;remove_index :authors_books, [:book_id] [...]<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="在Migration中操作新添加的字段" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fmanipulate-new-added-field-in-migration%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%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;">在Migration中操作新添加的字段</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%2F33%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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="REST on Rails指南4：路由" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F10%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%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/08/15/22889171.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;">REST on Rails指南4：路由</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%2Frails-performance-optimization-guide%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%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/3251308.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>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.pragmaticprogrammer.com%2Ftitles%2Frails%2F&amp;ei=B2GSRoGhDo3gsALy1fGeCA&amp;usg=AFQjCNF_eSYJT0SHfJxujjLtJo9FvWvBVg&amp;sig2=M-7oVdSCgMHKoYnzkR4r-A" title="AWDwR">AWDwR</a> 有一个小节讲到了如何创建多对多映射，不过使用db:migrate使得这个过程变得更为简单，这是来自<a href="http://blog.thembid.com/" title="thembid.com">thembid.com</a> 的一篇指南，原文在<a href="http://blog.thembid.com/index.php/2007/07/07/how-to-create-many-to-many-relationships-in-ruby-on-rails/" title="这里">这里</a> 。</p>
<p>为了让例子更容易理解一些，我修改了原文的两个表名，并使用了scaffold_resource替代了model，同时在最后给出了两个截图。这里我使用book和author来作为演示的resource，一本书可以有多个作者，一个作者也可能写了多本书，因此，作者和书属于多对多的关系。</p>
<p>首先，让我们创建resource：</p>
<p class="code"><code>ruby script/generate scaffold_resource book title:string<br />
ruby script/generate scaffold_resource authors name:string</code></p>
<p>然后，我们为创建映射关系表：</p>
<p class="code"><code>ruby script/generate migration create_authors_books</code></p>
<p>编辑db/migrate/003_create_authors_books.rb：</p>
<p class="code"><code class="ruby">class CreateAuthorsBooks < ActiveRecord::Migration<br />
&nbsp;&nbsp;def self.up<br />
&nbsp;&nbsp;&nbsp;&nbsp;create_table :authors_books, :id => false do |t|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :author_id, :integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :book_id,  :integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;add_index :authors_books, [:author_id, :book_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;add_index :authors_books, [:book_id]<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;def self.down<br />
&nbsp;&nbsp;&nbsp;&nbsp;remove_index :authors_books, [:book_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;remove_index :authors_books, [:author_id, :book_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;drop_table :authors_books<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p>执行db:migrate，我们可以看到数据库中多了3个表：books, authors, books_authors。</p>
<p>修改app/models/book.rb：</p>
<p class="code"><code class="ruby">class Book &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;has_and_belongs_to_many :authors<br />
end</code></p>
<p>修改app/models/author.rb:</p>
<p class="code"><code class="ruby">class Author &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;has_and_belongs_to_many :books<br />
end</code></p>
<p>这就搞定了，不过为了照顾喜欢看截图的群众，这里还是准备了几张图：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_112gb8tnwd8" /></p>
<p>修改app/views/books/index.rhtml:</p>
<p class="code"><code class="ruby">&lt;td&gt;&lt;%=h book.title %&gt; (<br />
&nbsp;&nbsp;&lt;% for author in book.authors %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;%= author.name %&gt;&nbsp;<br />
&nbsp;&nbsp;&lt;% end %&gt;<br />
)&lt;/td&gt;</code></p>
<p>现在，books/index变成了这样，每本书的后面都有了作者信息（当然你首先需要在authors_books表中添加作者和书的映射关系）：</p>
<p><img src="http://docs.google.com/File?id=ahxzccrw5xq_114cjhf9bfr" /></p>
<p>如果愿意，你也可以修改authors/index.rhtml，在每个作者后面显示他的作品。</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="在Migration中操作新添加的字段" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2Fmanipulate-new-added-field-in-migration%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%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;">在Migration中操作新添加的字段</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%2F33%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>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="REST on Rails指南4：路由" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F10%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%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/08/15/22889171.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;">REST on Rails指南4：路由</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%2Frails-performance-optimization-guide%2F&from=http%3A%2F%2Fwww.letrails.cn%2Farchives%2F33%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/3251308.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/33/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

