阅读更多

10顶
0踩

编程语言

原创新闻 Rails 2.0 Preview Release

2007-10-04 13:41 by 见习记者 hideto 评论(0) 有7862人浏览
原文: http://weblog.rubyonrails.org/2007/9/30/rails-2-0-0-preview-release

Action Pack: Resources
1,RESTful风格改进:
/people/1;edit将变成/people/1/edit

2,添加routing名字空间
map.namespace(:admin) do |admin|
  admin.resources :projects,
  :collection => { :inventory => :get },
  :member => { :duplicate => :post },
  :has_many => { :tags, :images, :variants }
end

这将生成类似inventory_admin_projects_url和admin_products_tags_url的命名routes

3,添加"rake routes"任务,将列出通过routes.rb生成的所有命名routes

4,一个新的convention:所有基于resource的controller都默认为复数形式,这样对不同context下的map都会对应到同一controller:
# /avatars/45 => AvatarsController#show
map.resources :avatars

# /people/5/avatar => AvatarsController#show
map.resources :people, :has_one => :avatar


Action Pack: Multiview
#respond_to得到进一步深入,对multiview使用形如action.format.renderer的模板名,如:
show.erb: 对所有formats使用同一模板
show.html.erb: html格式所使用的模板
index.atom.builder: 使用Builder渲染atom格式
edit.iphone.haml: 使用自定义HAML模板引擎对Mime::IPHONE格式渲染edit action

我们可以声明伪类型来为内部routing使用:
# should go in config/initializers/mime_types.rb
Mime.register_alias "text/html", :iphone

class ApplicationController < ActionController::Base
  before_filter :adjust_format_for_iphone

  private
    def adjust_format_for_iphone
      if request.env["HTTP_USR_AGENT"] && request.env["HTTP_USER_AGENT"][(iPhone|iPod)/]
        request.format = :iphone
    end
end

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.html # renders index.html.erb
      format.iphone # renders index.iphone.erb
    end
  end
end

我们可以在config/initializers/mime_types.rb文件里声明mime-type

Action Pack: Record identification
资源routes的使用简化
# person is a Person object, which by convention will
# be mapped to person_url for lookup
redirect_to(person)
link_to(person.name, person)
form_for(person)


Action Pack: HTTP Loving
1,HTTP Basic Authentication的简化使用:
class PostsController < ApplicationController
  USER_NAME, PASSWORD = "dhh", "secret"

  before_filter :authenticate, :except => [ :index ]

  def index
    render :text => "Everyone can see me!"
  end

  def edit
    render :text => "I'm only accessible if you know the password"
  end

  private
    def authenticate
      authenticate_or_request_with_http_basic do |user_name, password|
        user_name == USER_NAME && password == PASSWORD
      end
    end
end


2,JavaScript&stylesheet文件缓存
production模式下javascript_include_tag(:all, :cache => true)将把public/javascripts/*.js弄到public/javascripts/all.js里

3,设置ActionController::Base.asset_hot = "assets%d.example.com",则image_tag等asset calls会被自动分发到asset1~asset4

Action Pack: Security
1,预防CRSF攻击:
ActionController::Base.protect_from_forgery

2,预防XSS攻击:
TextHelper#sanitize

3,HTTP only cookies支持

Action Pack: Exception handling
1,rescue_action_in_public
class ApplicationController < ActionController::Base
  def rescue_action_in_public(exception)
    logger.error("rescue_action_in_public executed")
    case exception
    when ActiveRecord::RecordNotFound
      logger.error("404 displayed")
      render(:file => "#{RAILS_ROOT}/public/404.html", :status => "404 Not Found")
    # ...
  end
end


2,rescue_from
class PostsController < ApplicationController
  rescue_from User::NotAuthorized, :with => :deny_access

  protected
    def deny_access
      # ...
    end
end


Action Pack: Miscellaneous
1,AtomFeedHelper
# index.atom.builder:
atom_feed do |feed|
  feed.title("My great blog!")
  feed.updated(@posts.first.created_at)

  for post in @posts
    feed.entry(post) do |entry|
      entry.title(post.title)
      entry.content(post.body, :type => 'html')

      entry.author do |author|
        author.name("DHH")
      end
    end
  end
end


2,asset tag调用的性能提升和简单命名routes的缓存

3,将in_place_editor和autocomplete_for变成插件

Active Record: Performance
Query Cache,N+1查询的性能提升

Active Record: Sexy migrations
# old
create_table :people do |t|
  t.column,   "account_id",   :integer
  t.column,   "first_name",   :string,   :null => false
  t.column,   "last_name",    :string,   :null => false
  t.column,   "description",  :text
  t.column,   "created_at",   :datetime
  t.column,   "updated_at",   :datetime
end

# new
create_table :people do |t|
  t.integer    :account_id
  t.string     :first_name, :last_name, :null => false
  t.text       :description
  t.timestamps
end


Active Record: XML in JSON out
Person.new.from_xml("David")
person.to_json

Active Record: Shedding some weight
1,将acts_as_XYZ移到plugins

2,所有商业数据库adapters移到各自的gems里,Rails仅仅自带MySQL,SQLite和PostgreSQL的adapters
商业数据库adapters的gems命名规范为activerecord-XYZ-adapter,所以可以使用gem install activerecord-oracle-adapter来安装

Active Record: with_scope with a dash of syntactic vinegar
ActiveRecord::Base.with_scope成为protected以防止在controller里误用,因为它是设计来在Model里使用的

Action WebService out, ActiveResource in
在SOAP vs REST的战争里,Rails选择了REST,所以Action WebService被移出为一个gem,而引入的是著名的ActiveResource

ActiveSupport
添加Array#rand方法来从Array里随机得到一个元素
添加Hash#except方法来过滤不想要的keys
Date的一些扩展

Acion Mailer
一些bug fixes以及添加assert_emails测试方法

Rails: The debugger is back
gem install ruby-debug,然后在程序里某处使用"debugger",使用--debugger或-u来启动server即可

Rails: Clean up your environment
以前各种程序的配置细节都扔在config/environment.rb里,现在我们可以在config/initializers里建立不同的文件来配置不同的选项

Rails: Easier plugin order
以前plugins有依赖顺序时我们需要在config.plugins里列出来所有的plugins,现在可以这样config.plugins=[:acts_as_list, :all]

And hundreds uupon hundreds of other improvements
hundreds of bug fixes

So how do I upgrade?
首先升级到Rails 1.2.3,如果没有deprecation warnings,则可以升级到Rails 2.0
即将发布的Rails 1.2.4还会添加一些deprecation warnings

Thanks to everyone who’ve been involved with the development of Rails 2.0. We’ve been working on this for more than
six months and it’s great finally to be able to share it with a larger audience. Enjoy!
10
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Linux 重命名文件和文件夹

    目录 1. 使用 mv 命令 2. 使用 rename 命令 1. 使用 mv 命令 mv 命令可以重命名或者移动文件或文件夹。 mv A B # 将目录A重命名为B mv /a /b/c # 将/a目录移动到/b下,并重命名为c mv abc 123 # 将一个名为abc的文件重命名为123,如果当前目录下也有个123的文件的话,这个文件是会将它覆盖的。 2. 使用 rename 命令 1. 版本一: rename old_name new_name &lt;fil...

  • Eclipse里项目名有红叉,但是项目里的每一个文件都没有红叉

    原因一:导入的文件被删除了。 解决方法:右击项目名,在弹出的菜单中,选择“Bulid Path”--&gt;“configure build path”--&gt;“Source”,找到已被删除的那个的文件名,然后选择“remove”删除掉,再重新导入该文件。 原因二:可能是项目之前的JRE环境跟当前的环境不一致。 解决方法:右击项目--&gt;Build Path --&gt;config...

  • 跨域处理CORS 错误

    前端本地对接已上dev环境的接口域名,本地http请求https协议造成的跨域错误。从报错来看,浏览器的跨域预检请求 (OPTIONS 请求) 没有得到正确的响应。这通常是因为服务器没有返回 HTTP 200 OK 状态,或是预检请求的响应头不满足跨域策略的要求。上述配置中,当 OPTIONS 请求到达 /api/ 时,Nginx 会直接返回 200 状态,而不会转发到后端服务器。这可以有效避免预检请求失败的问题。

  • 有用的资源网址

    http://www.zpluz.com/forum.php

  • TeX Live2018_latex安装教程

    Y·S 2018年8月5日15:00:32 点击链接https://tug.org/texlive/ 注:Latex不止TeX这一种,这里只给出了TeX的安装,如果想尝试别的软件的同学可以自行寻找其他教程。 并执行如下操作: 第一步 第二步 第三步 第四步 第五步 装载下载好了的Tex Live安装包: 分以下几种情况: ...

  • linux 文件重命名

    linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B

  • 8个免费在线编程游戏网站,让每个人都可以学习编程(2)

    CodeMonkey是一款出色的游戏,可提高您的逻辑和解决问题的能力,同时学习如何编码。CodingGame是一个提供互动和免费游戏的平台,可以帮助我们学习超过25种流行的编程语言,包括JavaScript,Ruby,Java,Rust,C#和PHP。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

  • 波斯文组合规则,波斯语变形规则,波斯语组合规范,波斯文变形规则

    波斯-阿拉伯字母系统是一种以阿拉伯字母为主的书写系统。起初这套系统只用于阿拉伯语,但后来被波斯语吸收,并加入了四个字母:پ [p], چ [tʃ], ژ [ʒ], and گ [ɡ]。而后这套系统被许多不同的语言广为变化、应用,像是乌尔都字母、库尔德语字母、奥图曼土耳其字母、鞑靼语、阿塞拜疆语等。 交流QQ 2229691219 字母表: 它相似于阿拉伯文(详见:阿拉伯文

  • Python根据字典中的值排序

    1、如何根据字典中值的大小,对字典中的项排序 实际案例: 某班英语成绩以字典形式存储为:{'LiLei': 79, 'Jim': 88, 'Lucy': 92, ...} 根据成绩高低,计算学生排名。 注:字典的键就是学生名字,字典的值是学生分数。 解决方案: 使用内置函数sorted 方法1:利用zip......

  • 使用Google云存储上传图片

    谷歌云存储官网:https://console.cloud.google.com/ 1.获取服务账号密钥:官网--左侧导航API和服务--凭据--创建服务账号密钥 2.将下载的Json文件配置到环境变量 A.Windows: set GOOGLE_APPLICATION_CREDENTIALS=path_to_service_account_file> set GOOGLE_APPL

  • 搜索引擎汇总

    1. 360搜索:so.com 红衣教主周鸿祎用了最小的域名: so.com来做的搜索引擎,非常的简短。 2. 腾讯的搜搜: soso.com soso已经出现了很多年,但一直不温不火,但有强大的腾讯企鹅支撑,还是非常的强大的。 3. Baidu: baidu.com 最大的中文搜索引擎,百度搜索的内容无比丰富,技术强大,无需多言的了 4. Google: Google.com 不...

  • operator.itemgetter函数

    operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。 eg: students = [('john', 'A', 15), ('jane', 'B', 1...

  • ubuntu16.04命令行模式黑屏解决办法

    ubuntu16.04命令行模式黑屏解决办法问题描述在ubuntu上装Nvidia的显卡驱动,需要关闭图形界面才能安装驱动,但是,出现如下情况: 使用“ctrl+alt+F1”命令进入命令行界面是黑屏 使用“sudo service lightdm stop”关闭图形界面之后也是黑屏

  • 编程网课有哪些?

    自学编程可以说是一件很痛苦的事情,尤其在初次踏入编写代码之路时,没有大神带领,没找到好资源的我们,无不是踩着坑,一路填着坑,慢慢摸索走过来的,这样虽能成长很多,但也浪费了很多没有必要的时间(成长性价比不高)。对于大部分人来说,没有入门到放弃,那是万幸的。而网上有着许许多多的网课,但大部分人也不太能分得清一些网课的质量。所以,在此从众多的学习网站中精选10个认为质量较优的编程网。 0、菠萝编程 ...

  • 油猴(Tampermonkey)插件+脚本+IDM=百度网盘高速下载

    问题:   百度网盘下载有限速,导致下载速度根本跟不上你的网速。这个在下载一些大型文件的时候尤其突出。 解决:   油猴(Tampermonkey)插件+脚本+IDM实现多线程高速下载。   我测试的是64位windows7系统,浏览器是Chrome。   1.下载、安装Chrome浏览器。   建议在安装时,安装在默认位置,我在使用其他一些软件调用浏览器的时候,因为没有安装在默认位...

  • CSDN的账号

    很久没有登录过CSDN了,使用原来的账号试了一下,密码正确,但是系统要求修改密码,第一步要求输入手机号码或email。   这个是什么人设计的?有没有考虑最初注册的用户都不留手机和email的,无语…………...

  • JS如何发送HTTP请求

    首先在html文档中准备一个区域用来显示请求返回的内容,并且给onload事件绑定好方法,如下图所示 然后我们建立一个XMLHttpRequest请求对象,如下图所示 3 接下来处理xmlhttprequest的onload方法,如下图所示,判断返回的状态码是不是200,200代表的是成功 接下来,调用请求对象的open方法,设置请求的方式为...

  • Google云计算的基础架构

    主要内容: 云计算, Google云计算基础架构,GFS,MapReduce,BigTable, Google云计算平台App Engine简介主讲人:王咏刚 一 Google云计算技术架构:    GFS+MapReduce+BigTable    GFS解决的是数据存储的问题    MapReduce解决海量数据并行计算的问题    BigTable解决的是结构化

Global site tag (gtag.js) - Google Analytics