Posts Tagged ‘ rails

推荐一个console插件

前几天在看 screencasts,发现一好插件:Hirb 。这是个扩展命令行的插件,可以以更加易读的形式展现方法返回的内容(比如以 mysql 输出的形式展现 ActiveRecord 实例)

gem install cldwalker-hirb --source http://gems.github.com/

# Append the following lines into ~/.irbrc
require 'rubygems'
require 'hirb'
Hirb::View.enable

Screenshot of Hirb

发现“里克”

睡觉之前,习惯性的打开 google reader 看看国外有没有最新的 feed。空白的列表,唯有推荐中小字一行:里克的自习室,关注Ruby和Rails学习与开发

发现里克。

发现了一位创业者,一个普通的程序员,一个与生活做斗争的坚强的父亲。我无法描绘出心里的感受,所能做的,只是默默的记下这些,在心底祝福。

里克,一切都会好的!

生活并不平台,里克在努力

生活并不平坦,里克在努力

扩展 Paperclip

Paperclip 是 Rails 的一个处理 attachment 的插件,相对于以往的 FileColumn 在灵活性和效率上更胜一筹,而且代码也比较好看。这个视频 简单的介绍了 Paperclip 的使用方法。

默认的设置,URL 的占位符中与模型本身相关的只有 id,但是一些情况下,你可能会更希望以其他形式来组织你的附件目录 – 比如以 SKU 来代替数据库记录的 id。这里我们暂不讨论这种做法的好坏,双方面的,好处是目录结构更具有维护性,坏处是万一以后升级数据库,SKU 加个前缀什么的……

Here we go!

使用 paperclip 需要在 model 中调用 has_attached_file 方法,检查文档,有一些简单的使用样例,但是没有我们需要的。通过方法描述我们知道这个方法建立了一个 Paperclip::Attachment 对象,我们继续看文档。对象的方法很少,首先思考:应为我们需要配置的是 attachment 的 url 规则,那么应当是对应整个类而不是单个实力,因此我们只关注 Peperclip::Attachment 的类方法,只有两个。default_options 没有描述,而且展开代码发现并不是我们需要的。

# Paperclip::Attchment.interpolation

A hash of procs that are run during the interpolation of a path or url. A variable of the format :name will be replaced with the return value of the proc named “:name”. Each lambda takes the attachment and the current style as arguments. This hash can be added to with your own proc if necessary.

这正是我们需要的,接下来的扩展就非常方便了:


# app/models/product.rb
class Product < ActiveRecord::Base
  has_attached_file :photo,
    :style => { :thumb => '64x64>' },
    :url => '/images/products/:to_param.:extension'

  def to_param
    return self.sku
  end
end

# config/initializers/paperclip.rb
Paperclip::Attachment.interpolations.merge!(
  :to_param => lambda { |attachment, style| attachment.instance.to_param }
)

在这里不直接使用 :sku 作为占位符而使用 :to_param 是为了在其他模型中更加的灵活。

Rails 之一月动态

一个多月之前,Rails 2.2.2 发布了,同时,官方紧接着发表声明,称 Rails 2.3 正在开发中。看到这个消息,一边感叹于 Rails Core Team 进度之紧凑,同时开始做一件很有意思的事情:在接下来的事件里,每天都检查一次 http://github.com/rails/rails/tree/master 上的所有 commit。除了常规的性能优化调整、更独立的代码结构之外,的一系列提交揭示了 Rails 的下一步:

  • Joshua Peek 初次提到 middleware (commit),接下来似乎是他一直负责这部分的开发
  • 官方博客的每周更新,Rack integration 开始与 Rack 整合的步伐,middleware 开始频繁出现在以后的代码中
  • 紧接着的 This Week in Edge Rails,开始移除与 CGI 相关的代码
  • 官方博客介绍 Rails Metal
  • Session Storage 也迁移至 Rack (commit, commit)
  • 随后的几个大 commits 将 Rails 从 CGI 解放
  • Merb 将与 Rails 3 合并

可以看出,高扩展性会是 Rails 2.3 的卖点之一,同时,开发团队似乎有想法把 Rails 设计的更加“热插拔”,通过引入 middleware,在将来会有更多的选择;而与 Merb 的整合,则可以借鉴其中优秀的设计思想,在更高的版本中加以实现和整合。

于此同时,Ruby 1.9.1 也在紧密开发之中,不过道路并不平坦,RC1 的发布延迟到 09 年的 1 月份。正如 Robbin 所说,09 年的 Rails 很灿烂

Merb 将合并至 Rails 3!

原文地址:Merb gets merged into Rails 3!

一直一来,关于 Merb 与 Rails 之间的优劣与取舍之间的争论,伴随着两个框架的不断发展而没有停息。终于,在圣诞前夕,Merb 终于要于 Rails 3 合并了!

原文同时指出,这次的合并不是大规模的 Rails 代码重写(This is not a big bang rewrite),相对的,作为第一个合并的版本,两个团队更倾向于让两者并存,用户可以根据实际需求选择适合的组件(比如 ActiveRecord / Sequel / DM 作为 ORM)。无论如何,我个人都觉得这是一个非常好的开端,Rails 有了 Rails 以外的思想,将来必定会更加精彩!

最后,在 timeline 安排上,目前开发团队的主要精力还是在 Rails 2.3(我自己连续 3 个星期在关注于 Rails 2.3 Edge 的 commits,准备了另一篇博文),2.3 将会在 09 年的 1 月份放出,then all eyes will be on Rails 3!