Ruby 板


LINE

http://lightyror.blogspot.com/2006/11/pagination-collection.html 关於 contagious 的文章让我获益良多 我会在我有空的时间继续研究 Pagination 当我第一眼看到 Pagination 时,我感觉到他是一个很好的东西 ,但是第二眼(大概十分钟後)就觉得这东西很『实用吗?』,虽然我很喜欢 Ruby on Rails ,但是我依然觉得预设的 Pagination 这个东西是一个基本版的功能。Let's face the music。 如果我们要加入一些关联性的资料库操作时,要怎麽分页? 是在後面加入 :conditions 的叙述吗?但是如果跨relation tables使用呢?当我开始质疑 Ruby on Rails 在分页实做不够的时候,Ruby 跳出来了。 根据 Wiki,请在任何 controller 可以 load 的地方加入这一行程式 def paginate_collection(collection, options = {}) default_options = {:per_page => 10, :page => 1} options = default_options.merge options pages = Paginator.new self, collection.size, options[:per_page], options[:page] first = pages.current.offset last = [first + options[:per_page], collection.size].min slice = collection[first...last] return [pages, slice] end 然後,将你可以使用任何 Active Record 里面 Model 的函式,不管是预设的还是你自己写的,只要可以取出 Model Collection 的函式,都可以套入以下的方式 @分页Object , @object_list = paginate_collection ( 随便一个Model.任何可以取出collection的函式, :page => @params[:page] ) 然後其他 View 的使用方式就跟原本的 Pagination 一模一样,完全没有变。这时候有人会问,什麽都可以套入 paginate_collection 吗? 是的。 假设 blogs 跟 comments 呈现 1 : m 的关系,而你想对特定一个 blog 的 model 底下的 comment 作分页,你可以使用 @pages , @comment_list = paginate_collection ( blog.comments, :page => @params[:page] ) 这还不够,我有一个特别为某个 a Model 撰写的函式 find_hotest,这个函式会先去把某个 1:m 关系底下的所有 model object 取出来,然後每个 model object 都去找出另外一个相对应 n : m 的 Model 的数量取出来并且作 sort 。你看不懂我在讲什麽没关系,你只要知道这个在底层实做,这是一个我怎麽算都要 5个 SQL 做出来的函式,相当复杂。(不过我用 Active Record 1 行就写出来了,Active Record 真是太神奇了)当我想要为这个可怕的函式作分页,当然不可能使用 paginate :condition 来写,但是我们可以使用 paginate_collection @pages , @a_list = paginate_collection ( a.find_hotest , :page => @params[:page] ) 一样可以做到分页,而且 view 使用完全一模一样。只要能够套到 Active Record ,我想这个 paginate_collection 就应该趋近於无敌,可以陪伴我左右,替我东征西讨做完许多任务。 Beyond Java 里面 Justin Gehtland 说的一段话 ========================================== 最近,Ruby 动态的特性真的为我带来许多好处。我的应用系统需要一些常用的功能,这些功能应该归属於框架层次。不需要深入原码,来加上这些新功能。我就只是在执行期动态的扩充我需要的类别。这种扩充性是许多静态型别语言所诅咒的(且不会这麽做的) ========================================== 我想,这个例子是这段话的最好的佐证。当我每次觉得 Ruby on Rails 缺乏那个功能时,Ruby 总是会跳出来说『这个交给Ruby 去作,可以很简单就做出来』。Ruby on Rails 将心力花在他所注重的事情上面,其他不足的东西,就交给 Ruby 去作吧。以前我觉得是『 Ruby on Rails 造就了 Ruby』,现在我觉得『Ruby on Rails 跟 Ruby 处於水帮鱼,鱼帮水的角色,谁都少不了谁』。 Ruby 很美,Rails 很神奇,但是少了其中一个,另外一个就不再闪闪发光。只有两者并行,才足以撼动世界。 -- lighty RoR 是一个介绍 lighttpd , SQLite , Ruby and Rails 的 Blog http://lightyror.blogspot.com/ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.104.233







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP