阅读更多

10顶
0踩

编程语言

原创新闻 Rails 2.0 Preview Release

2007-10-04 13:41 by 见习记者 hideto 评论(0) 有7769人浏览
原文: 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 条 请登录后发表评论

发表评论

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

相关推荐

  • Package Control.7z

    Sublime Text 3的Package Control工具包。下载本包后,解压,然后复制到linux内,在使用命令解压,包解压后的命名为Package Control。最后把这个文件移动到包管理器的User文件夹下,重新打开Sublime Text 3 就可以使用Package Control 安装其他工具包了。(本人用的是linux 系统,所以只提供了linux 的大概方法)

  • 报错:The media could not be loaded, either because the server or network failed or ...

    vue播放视频报错The media could not be loaded, either because the server or network failed or

  • 主成分分析(PCA)原理详解

    机器学习中有关特征选择的问题,其实就是要剔除和类标签无关的特征,去除噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。现在的问题是,对于很高维数据,你能想象其分布吗?就算能描述分布,如何精确地找到这些主成分的轴?如何衡量你提取的主成分到底占了整个数据的多少信息?所以,我们就要用到主成分分析的处

  • 你知道怎么搜索暗网吗?

    暗网(Dark Web)是指互联网上无法通过传统搜索引擎(如Baidu、Google、Bing等)直接访问和索引的一部分网络。暗网的内容通常需要特殊的软件或权限才能访问,因此它相对于常规的表面网来说更难以被普通用户和搜索引擎追踪和访问。暗网上的活动多种多样,其中既包括合法的用途,如匿名通信、保护言论自由,也包括非法的用途,如贩卖毒品、武器、盗取个人信息和进行网络犯罪活动。Tor浏览器是一种专门设计用于访问Tor网络的网络浏览器。

  • import sys是什么意思_学了半天,import 到底在干啥?

    点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!明哥原创的200页《PyCharm 中文指南》 震撼发布Python凭什么就那么好用呢?毫无疑问,大量现成又好用的内置/第三方库功不可没。那我们是怎么使用它们的呢?噢,对了~是用的import xxx这个语句。之所以会有此一问,也是之前有一次使用PyCharm进行开发时(又)踩了个坑……废话少说,先讲问题...

  • PCA算法详解——化繁为简

    一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、前言 老鹰是一个三维立体实物,而图片是二维的,但我们能一眼识别出上图是一只老鹰而非鹌鹑,可见对于某些高维的数据,我们可以在低维空间下识其概貌,对其有个清晰的认知。然而,当我们沿老鹰翅尖拍摄一张照片,我们可能并不能很容易地看出这是一只老鹰。归其原因,拍摄的角度不同,导致最终的结果不同,在第一种情况下,图片保留...

  • IDM6.41百度网盘不限速下载,油猴插件完美解决,贼快!

    从油猴插件获取新脚本进入,或者从网址进入https://greasyfork.org,搜索百度网盘,会出来很多百度网盘相关插件,选择一款进行安装即可(亲测可用)。,想必大多数人都听说过,IDM的下载速度能提高多达5倍,用过的都说好。插件安装完成后,打开百度网盘,可以看到旁边多了一个下载助手的按钮,我们只需要选中需要下载的文件,点击简易下载助手即可获取到该文件的直链。然后借助油猴插件,获取到百度网盘文件下载直链地址,然后将直链地址复制到IDM新建任务,即可完成下载。不限速下载百度网盘文件,学会了吗?

  • Python中的os模块和sys模块

    讲解了Python中的os模块和sys模块(附有代码示例)

  • 使用videojs,安卓可以正常播放视频,ios浏览器报错The media could not be loaded,either because the server or network ...

    写在开头 video标签在各个浏览器中表现各异,存在很多兼容性问题,所以我尝试使用了videojs这个框架 传送门:videojs起步 传送门:videojs文档 直入主题 问题:按照videojs文档添加视频后,发现安卓可以正常播放视频,但是ios浏览器报错:The media could not be loaded,either because the server or network failed or because the format is not supported(无法加载媒体,原因可能是

  • PCA的数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。 当然我并不打算把文章写成纯数

  • The media could not be loaded, either because the server or network failed or because the format is

    1.解决 如果资源是本地的会出现这种情况 需要把资源写入require()方法里面 sources: [{ type: "video/mp4",//这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 src: require("../../assets/video/非凡 杰出 不同凡响.mp4") //url地址 }], ...

  • coursera 上无法播放视频的解决方法

    大家都知道coursera上的资源很丰富,但就是视频播放不了。今天也遇到了这个问题,所以想以此作一个分享。 今天想在coursera 学一下上面的课程,但是打开了之后就出现了“The media could not be loaded, either because the server or network failed or because the format is not support...

  • 主成分分析法PCA介绍及其基本原理

    PCA的主要目的:降维 在许多领域的研究学习中,往往需要同时是处理大批量的数据以进行研究。这些数据的处理是有很多维的,处理起来非常困难,即使交给计算机也需要很复杂的算法。如果不同变量之间有复杂的相关性,算法则会更加复杂,难以处理。显然也不能单独对各个变量进行分析。这种情况下,需要另辟蹊径。 这里需要一种方法,可以在减少运算复杂性的同时尽量最最小化损失的信息量,也就是PCA了。 所谓减少运算复杂性,...

  • Tomcat做成系统服务

    下面是如何有关于Tomcat服务的设置: 一、注册为Windows系统服务: 运行cmd打开控制台,进入Tomat目录/bin文件夹,会看到service.bat输入如下命令运行。 service install 服务名称 这一句是将当前Tomcat服务器注册为系统服务,服务名称为service.bat中PR_DISPLAYNAME加上指定的服务名称, 如果服务名不写则服务名为servic...

  • python中import后面加什么_python中import有什么用法

    python中import用于导入模块。具体用法:下面程序使用导入整个模块的最简单语法来导入指定模块:# 导入sys整个模块import sys# 使用sys模块名作为前缀来访问模块中的成员print(sys.argv[0])导入整个模块时,也可以为模块指定别名。例如如下程序:# 导入sys整个模块,并指定别名为simport sys as s# 使用s模块别名作为前缀来访问模块中的成员print...

  • HDR相关标准-HLG/HDR10/HDR10+/DOLBY VISION

    杜比视界HDR参数_qq26983255的博客-CSDN博客_pq和hlghttps://blog.csdn.net/qq26983255/article/details/119830337?spm=1001.2014.3001.5502 HDR到底是什么?_相见不如怀念-CSDN博客一,定义SDR (Standard Dynamic Range), 标准动态范围HDR (High Dynamic Range), 高动态范围HLG:HLG的全称是Hybrid Log Gamma,它是由英国BBC和日本NH

  • 微信电脑版,仅输入账号密码,无需二维码

    微信电脑版。 1.仅需输入账号密码,即可登录。 2.无需二维码。

  • js 数组的filter方法

    偶然间在看别人的代码时看见了一个filter方法。此前没用过。记录一下.语法:array.filter(function(currentValue,index,arr), thisValue)currentValue: 当前元素 index:当前元素索引 arr:当前元素所属数组 thisValue:作为参数中的function中的this实例:var ages = [32, 33, 16,

  • 二代洋葱路由技术Tor控制平台的设计与实现

    自己在一些网站收集的一些论文,是关于tor的技术,希望能对一些人有帮助,呵呵

  • 用Python让单片机“行动”起来——MicroPython实战入门篇

      MicroPython以微控制器作为目标,从而使得Python可以用来控制硬件。说到MicroPython,也许有人会感到陌生。而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释型语言,经过数十年的磨砺,如今Python已经成为最具人气的开源编程语言之一。MicroPython顾名思义就是运行在MCU的Python,换句话说Python可以让单片机行动起来了。   Mi...

Global site tag (gtag.js) - Google Analytics