精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (11)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-29
最后修改:2009-07-29
class TaskController < ApplicationController def incomplete @tasks = Task.find(:all, :conditions => ['complete = ?', false]) end def last_incomplete @task = Task.find(:first, :conditions => ['complete =?', false], :order => 'created_at DESC') end end 用find_by可以更优雅的实现: class TaskController < ApplicationController def incomplete @tasks = Task.find_all_by_complete(false) end def last_incomplete @task = Task.find_by_complete(false, :order => 'created_at DESC') end end find_by方法带order参数和find方法的一样。 怎么发论坛来了。。搞错了.................... 为什么发到论坛的东西自己删不掉呢?这不合理 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-29
最后修改:2009-07-29
引用 def last_incomplete
@task = Task.find_by_complete(false,rder => 'created_at DESC') end 感觉你这个其实可以讨论一下 one 这种封装到底有没有用 two 这种作用有多大,有没有过度封装的嫌疑 |
|
返回顶楼 | |
发表时间:2009-07-29
下一站,火星 写道 引用 def last_incomplete
@task = Task.find_by_complete(false,rder => 'created_at DESC') end 感觉你这个其实可以讨论一下 one 这种封装到底有没有用 two 这种作用有多大,有没有过度封装的嫌疑 1:将其封装为一个 helper 方法或者 controller 方法的确没必要,应该是将它移到 Model 中作为 self method,这样这个方法在 association 中也可以用,这样才有意义。 2:动态方法在网站开发初期还是不错的,可以写出简洁易懂的代码,但是到了后期,多半会重构为 :conditions query , 因为 method_missing 毕竟还是有性能损失的。 |
|
返回顶楼 | |
发表时间:2009-07-29
1.嗯,放在model更好一些:
class Task < ActiveRecord::Base belongs_to :project def self.find_incomplete(options = {}) with_scope :find => options do find_all_by_complete(false, :order => 'created_at DESC') end end end 2. 引用 Make it Work, Make it Clean, Make it Fast (if necessary)
如果真有性能的需要可以加硬件设备,人家校内网都5000台服务器了http://www.programmer.com.cn/419/ 如果有时间优化重构,先优化一下前端吧 PS:如果性能真的那么重要,像haml这些东西就没有存在的意义了。 |
|
返回顶楼 | |
发表时间:2009-07-29
对于这种代码重构,我个人比较喜欢named_scope
class Task < ActiveRecord::Base named_scope :incomplete, :conditions => "complete = false" named_scope :latest, :order => "created_at desc" end @tasks = Task.incomplete @tasks = Task.incomplete.latest 我使用Dynamic find比较多的地方在和initialize共用,比如记录用户访问他人博客的功能: Visit.find_or_initialize_by_user_id_and_visitor_id(@user.id, current_user.id).update_attribute(:visited_at, Time.now) |
|
返回顶楼 | |
发表时间:2009-07-29
Hooopo 写道 2. 引用 Make it Work, Make it Clean, Make it Fast (if necessary)
如果真有性能的需要可以加硬件设备,人家校内网都5000台服务器了http://www.programmer.com.cn/419/ 如果有时间优化重构,先优化一下前端吧 PS:如果性能真的那么重要,像haml这些东西就没有存在的意义了。 校内网只是个特例,大多数公司的网站不会超过5台服务器,你去看看 robbin 的 twitter, javaeye 也三年了,他现在买台服务器也要考虑再三, 还在不停地想法榨干服务器最后一点优化性能的可能,都说横向扩展,但是实际应用中成本的考虑更多一些。而这里大多数人做网站也许一辈子也不会管理超过三台服务器,所以有的新闻只是新闻,有时候对个人和公司来说连参考价值都没有。 PS: ERB,builder 的性能确实要比 HAML 好一些(现在haml差距也不是很大了), 如果只是做输出 xml 的 service 应用,那么 haml 还真没必要用。 参看: http://ridingtheclutch.com/2009/07/13/the-ultimate-ruby-performance-test-part-1.html |
|
返回顶楼 | |
发表时间:2009-07-29
QuakeWang 写道 对于这种代码重构,我个人比较喜欢named_scope
的确楼主的那些重构, rails 后来版本中的 named_scope 是最好的方式,现在自己写这种 condition query method 已经很少了。 |
|
返回顶楼 | |
发表时间:2009-07-29
Hooopo 写道 1.嗯,放在model更好一些:
class Task < ActiveRecord::Base belongs_to :project def self.find_incomplete(options = {}) with_scope :find => options do find_all_by_complete(false, :order => 'created_at DESC') end end end 2. 引用 Make it Work, Make it Clean, Make it Fast (if necessary)
如果真有性能的需要可以加硬件设备,人家校内网都5000台服务器了http://www.programmer.com.cn/419/ 如果有时间优化重构,先优化一下前端吧 PS:如果性能真的那么重要,像haml这些东西就没有存在的意义了。 系统的瓶颈往往在数据库,你数据库都快累了,你前端搞得在华丽有啥用?另外增加硬件并没有你想象的那么简单,这种server farm往往都需要一个庞大的团队维护,人家校内有几个亿的投资,你怎么不去比? |
|
返回顶楼 | |
发表时间:2009-07-29
最后修改:2009-07-29
前端优化又不是美化,和华丽有什么关系?
这是《高性能网站建设指南》一书推荐的前端优化指南: http://www.douban.com/subject/3132277/ 引用 主要包括减少HTTP请求、Edge Computing技术、Expires Header技术、Gzip组件、CSS和JavaScript最佳实践、主页内联、Domain最小化、JavaScript优化、避免重定向的技巧、删除重复JavaScript的技巧、关闭ETags的技巧、Ajax缓存技术和最小化技术等 相信这些还是有点用的......... |
|
返回顶楼 | |
发表时间:2009-07-31
最后修改:2009-07-31
关于这种状态型的查询,建议引入状态机,配合一些named_scope小技巧:
http://www.iteye.com/topic/412610?page=2#1081161 实现 Task.completed 这种查询 简单有效又优雅 是的,我在卖瓜 |
|
返回顶楼 | |