`

关于Rails 2.3 十件你应该知道的事

阅读更多
首先,这个是一篇粉饰Rails2.3的文章,挑选了十个方面展示Rails2.3的改进.

1. Rails在Development的模式下启动更快.

这是个所有程序员都会感激的事,在development模式下rails使用lazy加载的方式启动.大幅度的提升了启动速度.
使用空的工程文件,可以得到如下的真是数据对比:

引用
script/server -d:

Rails 2.2: 1.461s
Rails 2.3: 0.869s


当然,真实环境一定会比这个值要慢毕竟这里没有加载任何依赖的类库.

2. 官方对于Rails Engines支持

得益于Merb的slices方法的实现,Rails将官方支持Engines到rails核心.Engines可以有自己的models,views和自己的routes,在之前,Engines一直都是以插件存在,这样就是往往,会遇到rails不版本的不支持的问题.

Rails Engines有一些很棒的功能,请查看Rails Engines网站参考.

3. Routing 的提升

RESTful routes 现在将使用更少的内存,因为类似formatted_*的路由将不再生成,这意味这将节省大概50%的内存
如果,有如下router:

map.resources :users

如果你希望读取XML格式版的user资源,那么你将:

user_path(123, :format => 'xml')


在Rails2.3 only和except 选项将不允许在嵌套路由使用,因为之前的功能会导致误解.

map.resources :users, :only => [:index, :new, :create] do |user|
  # now will generate all the routes for hobbies
  user.resources :hobbies
end


4. JSON 功能的提升

在ActiveSupport::JSON中,如下功能得到提升:

to_json 在JSON spec改进了引号使用
Before:

{123 => 'abc'}.to_json
=> '{123: "abc"}'

Now:

{123 => 'abc'}.to_json
=> '{"123": "abc"}'


加强了对Unicode字符的处理,不会显示乱码
Before:

ActiveSupport::JSON.decode("{'hello': 'fa\\u00e7ade'}")
=> {"hello"=>"fa\\u00e7ade"}

Now:

ActiveSupport::JSON.decode("{'hello': 'fa\u00e7ade'}")
=> {"hello"=>"façade"}


5. Default scopes功能

在Rails2.3之前的版本理,如果,你在执行find的时候,没有附加选项,你将得到一个没有任何排序,或限制的的查询.现在,在Rails2.3上你可以通过Default scopes来使用这样的功能,演示代码如下:

class User < ActiveRecord::Base
  default_scope :order => '`users`.name asc'
end


Default的scope会被任何的定制选项覆盖.

User.all # 将使用默认scope
User.all(:order => 'name desc') # 将会按照name降序输出.


Example:

User.create(:name => 'George')
User.create(:name => 'Bob')
User.create(:name => 'Alice')

puts User.all.map { |u| "#{u.id} - #{u.name}" }

3 - Alice
2 - Bob
1 - George


6. 嵌套的事务执行

传递
 :requires_new => true 
给 ActiveRecord::Base
就可以创建一个嵌套的事务处理
User.transaction do
  user1 = User.create(:name => "Alice")

  User.transaction(:requires_new => true) do
    user2 = User.create(:name => "Bob")
   end
end


7. Asset Host Objects

自从Rails2.1开始,就可以配置Rails使用asset_host这个Proc,例如,一些浏览器不允许SSl请求从不安全的源加载images文件.如果,想要保证SSL始终从相同的host请求,可以如下:

	

ActionController::Base.asset_host = Proc.new { |source, request|
  if request.ssl?
    "#{request.protocol}#{request.host_with_port}"
  else
    "#{request.protocol}assets.example.com"
  end
}

Rails2.3中会如下处理,以便不会显得混乱:

class SslAssetHost
  def call(source, request)
    if request.ssl?
      "#{request.protocol}#{request.host_with_port}"
    else
      "#{request.protocol}assets.example.com"
    end
  end
end

ActionController::Base.asset_host = SslAssetHost.new


8. 更容易的更新Rails timestamp字段

如果,你希望试图更新Rails自动生成的timestamp字段,例如:created_at和update_at, 你会发现这是件相当痛苦的事,因为,在Rails2.3之前,这是没有考虑可以允许的.
现在,你可以通过类似,如下的代码,更新这个字段:
User.create(:name => "Alice", :created_at => 3.weeks.ago, :updated_at => 2.weeks.ago)

=> #<User id: 3, name: "Alice", created_at: "2009-03-08 00:06:58", updated_at: "2009-03-15 00:06:58">


那么,相同的如果,你不希望你的用户,修改这个字段,那么记着把这个字段,标记成attr_protected.

9. 嵌套属性和表单

这个改进,可以大幅度的改进复杂表单的描述和处理复杂对象.
首先,嵌套属性可以允许父对象代理授权子对象


class User < ActiveRecord::Base
 has_many :hobbies, :dependent => :destroy

  accepts_nested_attributes_for :hobbies
end

User.create(:name => 'Stan', 
            :hobbies_attributes => [{:name => 'Water skiing'}
                                    {:name => 'Hiking'}])


很简洁的,这将保存父对象和它关联models,如果,有错误,它们都不会被保存.

使用 FormBuilder实例的 fields_for方法, 表单可以出复杂的对象,示例如下:

	

<% form_for(@user) do |f| %>
  <div>
    <%= f.label :name, "User name:" %>
    <%= f.text_field :name %>
  </div>

  <div>
    <h2>Hobbies</h2>

    <% f.fields_for(:hobbies) do |hf| %>
      <div>
  <%= hf.label :name, "Hobby name:" %>
  <%= hf.text_field :name %>
      </div>
      <% end %>
  </div>

  <%= f.submit 'Create' %>
<% end %>


class UsersController < ApplicationController
  def new
    # In this contrived example, I create 3 dummy objects so I'll get
    # 3 blank form fields.
    @user = User.new
    @user.hobbies.build
    @user.hobbies.build
    @user.hobbies.build
  end
end



10. Rails Metal

You can now write very simple Rack endpoints for highly trafficked routes, like an API. These are slotted in before Rails picks up the route.

A Metal endpoint is any class that conforms to the Rack spec (i.e., it has a call method that takes an environment and returns the an array of status code, headers, and content).

Put your class in app/metal (not generated by default). Return a 404 response code for any requests you don’t want to handle. These will get passed on to Rails.

There’s a generator you can use to create an example Metal end point:

script/generate metal classname


In my sample app, I have what I would consider the “minimally useful” Rails Metal endpoint. It responds to /users.js and returns the list of users as JSON.

class UsersApi
  def self.call(env)
    # if this path was /users.js, reply with the list of users
    if env['PATH_INFO'] =~ /^\/users.js/
      [200, {'Content-Type' => 'application/json'}, User.all.to_json]
    else
      # otherwise, bail out with a 404 and let Rails handle the request
      [404, {'Content-Type' => 'text/html'}, 'not found']
    end
  end
end

If you want a little bit more help, you can use any other Rack-based framework, for example Sinatra.

For more details on how Rails Metal works, check out Jesse Newland’s article about it.
分享到:
评论

相关推荐

    rails 2.3 chm文档 ,官方最新版

    rails 2.3 chm文档 官方最新版

    railsbrain网站的rails2.3文档(bug修复版)

    Railsbrain是一个专注于Rails框架的在线资源平台,而这个“railsbrain网站的rails2.3文档(bug修复版)”显然是一份针对Rails 2.3版本的更新文档,旨在修复用户在浏览和交互过程中遇到的问题。Rails是Ruby编程语言的...

    Ruby on Rails 2.3 Guide.chm

    Ruby on Rails Guide:是rails官方教程,本人为了大家学习查阅的方便,制成chm格式。就如同java doc的chm格式一样方便。

    ruby on rails 2.3.5 api html版

    在这个API文档中,你可以找到关于以下关键知识点的详细信息: 1. **Ruby语法基础**:虽然这个文档主要关注Rails框架,但了解Ruby的基础知识至关重要。这包括变量、常量、方法、类、模块、继承和元编程等概念。 2. ...

    rails 3.2 API

    Rails 3.2 API 是一个重要的开发资源,主要用于Ruby on Rails框架的开发。Rails是基于Ruby语言的一个开源Web应用程序框架,遵循MVC(Model-View-Controller)架构模式,广泛应用于构建动态网站和Web应用程序。Rails ...

    rails2.3.2

    描述中的 "ruby and rails 的框架rails-2.3.3.zip" 提到的是 Rails 的另一个版本 2.3.3,尽管与标题中的版本号不完全匹配,但我们可以推断这是关于 Rails 2.3.x 系列的讨论。这个压缩包很可能包含了 Rails 框架的源...

    rails guides 2.3 CHM版

    rails guides的CHM版本,这个向导的版本是2.3

    i18n_routing:用于Rails 2.3.x和Rails的I18n路由模块。轻松转换您的路由!

    所有必需的信息都可以在Wiki上找到: 如有疑问,请使用i18_routing谷歌论坛: 适用于Rails 2.3、3.0、3.1和3.2下一个版本的TODO(写于2010年6月9日) 处理同一资源名称的多个翻译(例如:嵌套和非嵌套资源) 处理...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    pgq:基于 PgQ Skytools for PostgreSQL 的 ARRails 队列系统,如 Resque on Redis。 Rails 2.3 和 3 兼容

    Rails 2.3 和 3 兼容。 关于 PgQ 安装 安装天空工具:Ubuntu 11.10: # apt-get install postgresql-server postgresql-client # apt-get install skytools 宝石档案: gem 'pgq' 从 database.yml 创建股票...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    Rails 敏捷开发实践

    《Rails 敏捷开发实践》是一本关于如何高效地利用 Ruby on Rails 进行敏捷开发的经典书籍。本书由蔡望勤(Jesse Cai)撰写,他是一位资深的 Ruby 开发者,自2006年起便致力于 Ruby on Rails 的开发工作,同时也是...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    Rails

    压缩包子文件的文件名称 "Ruby on Rails.pptx" 提示可能是一个关于Rails的PowerPoint演示文稿,其中可能涵盖了Rails的基础概念、安装步骤、主要组件介绍、开发流程、最佳实践,以及可能的示例代码和案例研究。...

    RailsSpace

    ### RailsSpace:构建社交网络网站 #### 一、引言 RailsSpace是一本专注于通过实践项目教授Ruby on Rails开发的书籍。本书通过构建一个面向Ruby社区的社交网络平台——RailsSpace,来帮助读者掌握Ruby on Rails的...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Rails3常用命令行命令

    在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个Rails项目是开发的起点。你可以使用以下命令创建一个新的工程: ```bash rails new 工程名 ``` 这会生成一个包含所有...

Global site tag (gtag.js) - Google Analytics