<?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>里克的自习室 &#187; acts_as_taggable</title>
	<atom:link href="http://railser.cn/index.php/blog/tag/acts_as_taggable/feed" rel="self" type="application/rss+xml" />
	<link>http://railser.cn</link>
	<description>关注Ruby和Rails的学习与开发</description>
	<lastBuildDate>Thu, 05 Aug 2010 03:15:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>开发笔记：rails分页和acts_as_taggable插件的应用[重发]</title>
		<link>http://railser.cn/index.php/blog/development-log-rails-pagnate-and-acts-as-taggable</link>
		<comments>http://railser.cn/index.php/blog/development-log-rails-pagnate-and-acts-as-taggable#comments</comments>
		<pubDate>Thu, 18 Dec 2008 16:15:41 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[acts_as_taggable]]></category>

		<guid isPermaLink="false">http://railser.cn/archives/development-log-rails-pagnate-and-acts-as-taggable</guid>
		<description><![CDATA[最近一个月在忙于开发项目，所以没有更新博客。不过开发中还是学到不少东西。 对于一个程序员，阅读是相当有帮助的，读别人的博客，读源码，读经验文章 ，即便读别人的开发代码，都是有帮助的。 本次开发的初始，就是在读别人的开发代码，然后一点点找到思路，继续在原有基础上加强功能。由于上一个版本的代码写的相当有水准，所以对自己的开发也提高不少。 本次开发的项目是一个在线视频教学系统。开发中用到了曾经写过的分页代码和一个rails插件：acts_as_taggable。 下面对这两个部分进行总结。 一、分页 下面的程序在3个项目上使用过。 models/page.rb class Page attr_accessor :pages #分页连接列表，[]类型 attr_accessor :cur #当前页 end helpers/application_helper.rb def howtopage_links(pagecls=nil) #在页面输出分页连接，pagecls:分页实例 if pagecls return pagecls.pages.collect {&#124;t&#124; [if t.to_s == pagecls.cur ""+(t.to_s)+"" else ""+(t.to_s)+"" end] } end end controllers/application.rb def howtopage(totalcount=0, per_page=6) cur_page = params[:page] &#124;&#124; 1 #直接从页面取得page变量 x = (cur_page.to_i - 1) * per_page [...]]]></description>
			<content:encoded><![CDATA[<pre><script type="text/javascript"><!--mce:0--></script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"><!--mce:1--></script></pre>
<p>最近一个月在忙于开发项目，所以没有更新博客。不过开发中还是学到不少东西。</p>
<p>对于一个程序员，阅读是相当有帮助的，读别人的博客，读源码，读经验文章 ，即便读别人的开发代码，都是有帮助的。</p>
<p>本次开发的初始，就是在读别人的开发代码，然后一点点找到思路，继续在原有基础上加强功能。由于上一个版本的代码写的相当有水准，所以对自己的开发也提高不少。</p>
<p>本次开发的项目是一个在线视频教学系统。开发中用到了曾经写过的分页代码和一个rails插件：acts_as_taggable。</p>
<p>下面对这两个部分进行总结。</p>
<h3>一、分页</h3>
<p>下面的程序在3个项目上使用过。<br />
models/page.rb</p>
<blockquote>
<pre lang="ruby">class Page
  attr_accessor :pages #分页连接列表，[]类型
  attr_accessor :cur #当前页
end</pre>
</blockquote>
<p>helpers/application_helper.rb</p>
<blockquote>
<pre lang="ruby">  def howtopage_links(pagecls=nil) #在页面输出分页连接，pagecls:分页实例
    if pagecls
      return pagecls.pages.collect {|t|
      [if t.to_s == pagecls.cur
        "<a class="now" href="http://railser.cn/wp-admin/?page=#%7Bt.to_s%7D">"+(t.to_s)+"</a>"
      else
        "<a href="http://railser.cn/wp-admin/?page=#%7Bt.to_s%7D">"+(t.to_s)+"</a>"
      end]
      }
    end
  end</pre>
</blockquote>
<p>controllers/application.rb</p>
<blockquote>
<pre lang="ruby">  def howtopage(totalcount=0, per_page=6)
    cur_page = params[:page] || 1 #直接从页面取得page变量
    x = (cur_page.to_i - 1) * per_page
    pagecount = totalcount / per_page
    if totalcount % per_page != 0
      pagecount += 1
    end
    page = Page.new
    page.pages = (1..pagecount).collect
    page.cur = params[:page] || "1"
    return page, x #page为一个包装的分页类，x为find方法的偏移量
  end</pre>
</blockquote>
<p>在一个notebook_controller.rb中</p>
<blockquote>
<pre lang="ruby">@notes_count = Notebook.count(:conditions=&gt;['user_id = ?', params['user_id']])
per_page = 6 #每页记录数
@page, x = howtopage(@notes_count, per_page)
@notes = Notebook.find(:all, :conditions=&gt;['user_id = ?', params['user_id']],
 <img src='http://railser.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> rder=&gt;"id desc", <img src='http://railser.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ffset=&gt;x, :limit=&gt;per_page)</pre>
</blockquote>
<p>在对应的页面中</p>
<blockquote>
<pre lang="ruby">&lt; %=howtopage_links(@page)%&gt;</pre>
</blockquote>
<p>这段方法有很多可以改进的地方，但是能用就好。<br />
不过这个分页绝对算是ruby和rails入门的练习，如果想使用更专业的分页，还是推荐will_paginate插件。可以通过下面的方法安装：<br />
script/plugin install svn://errtheblog.com/svn/plugins/will_paginate<br />
介绍页面：<a href="http://errtheblog.com/posts/56-im-paginating-again">http://errtheblog.com/posts/56-im-paginating-again</a></p>
<p>08年12月19日补充：</p>
<p>这篇博客是去年12月2日写的，一年的时间足够改变世界了。现在这个插件的地址在：http://github.com/mislav/will_paginate/tree/master</p>
<h3>二、acts_as_taggable</h3>
<p>虽然标题写的是acts_as_taggable，但是首先要说明，我用的是acts_as_taggable_on_steroids，可以通过下面的方法进行安装：<br />
ruby script/plugin install</p>
<p>http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids</p>
<blockquote><p>注意不同之处：<br />
在<a href="http://www.slashdotdash.net/articles/2006/04/29/acts_as_taggable-per-user-tagging"> acts_as_taggable per user tagging</a>篇提到：also an acts_as_taggable的gem安装和plugin安装结果是不一样的. acts_as_taggable的plugin仅适用与Rails 1.1.<br />
里克：其实上面写这句话的人是针对不同版本的，仅供参考。</p>
<p>所以，选择哪个tag插件，需要注意下。不同的插件使用的方法是不一样的。DDH的acts_as_taggable<a href="http://taggable.rubyforge.org/">文档</a>是关于那个插件的，它可以通过<br />
svn co http://dev.rubyonrails.com/svn/rails/plugins/legacy/acts_as_taggable/ acts_as_taggable<br />
获得。目前看也仅能从这里获得。</p></blockquote>
<p>非常详细的适用方法请看<a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids">Plugins &#8211; Acts As Taggable On Steroids</a></p>
<h3>其他Rails插件</h3>
<p>本部分被转移到 <a href="http://railser.cn/archives/mephistoblog-vender-and-plugins">MephistoBlog使用的插件和第三方代码介绍</a></p>
<p>参考资料：<br />
<a href="http://taggable.rubyforge.org/">RDoc</a><br />
<a href="http://wiki.rubyonrails.org/rails/pages/Acts+As+Taggable+Plugin">Acts As Taggable Plugin</a><br />
<a href="http://wiki.rubyonrails.org/rails/pages/ActsAsTaggablePluginHowto">ActsAsTaggablePluginHowto</a><br />
<a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids">Plugins &#8211; Acts As Taggable On Steroids</a><br />
<a href="http://www.slashdotdash.net/articles/2006/04/29/acts_as_taggable-per-user-tagging"> 为每个用户曾加tag功能[acts_as_taggable per user tagging]</a><br />
<a href="http://baike.baidu.com/view/15482.htm">ASCII</a><br />
<a href="http://rubylib.cn/">Ruby Lib中文站</a></p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/index.php/blog/development-log-rails-pagnate-and-acts-as-taggable/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
