阅读更多

10顶
0踩

编程语言

原创新闻 Rails 2.0 Preview Release

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

发表评论

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

相关推荐

  • Html中空格的方式

    1.&nbsp;空格符 大&nbsp;&nbsp;家&nbsp;&nbsp;好! 显示效果为:大 家 好! 2.p标签使用空两格 百度地图API功能 百度地图API功能 效果如下: 3.span标签空格 百度地图API功能 百度地图API功能 效果如下: 4.word-spacing属性, Happy new year! 效果: ![在这里插入图片描述](https://img-blog....

  • HTML中的空格符号

    HTML中的常用的4种空格符号

  • Kettle的安装及简单使用

    1、什么是kettleKettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。2、Kettle工程存储方式(1)以XML形式存储(2)以资源库方式存储(数据库资源库和文件资源库)3、Kettle的两种设计4、Kettle的组成5、kettle特点。

  • DCN(Deep & Cross Network for Ad Click Predictions)——深度特征交叉网络

    Deep & Cross Network(DCN)是一种新型神经网络模型,结合了深度神经网络(DNN)和交叉网络(Cross Network),用于处理大规模点击率(CTR)预测问题。DCN能够自动高效地学习特征交互,适用于稀疏特征和密集特征。与相比,主要是宽组件(Wide Component)被替换为交叉网络(Cross Network),并对输入输出做了相应的调整。因此,本文的介绍重点在于交叉网络。

  • 什么是CUDA与CUDNN

    什么是CUDA?CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。什么是CUDNN?NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,...

  • HTML段落标签、换行标签、文本格式化标签与水平线标签

    在四个格式化标签中虽然每一类的第一个标签和第二个标签实现的效果相同,但是为了更加强调文本效果,提高代码可读性,推荐用第一种标签。在网页中,要把文字有条理地显示出来,就需要将这些文字分段显示。在 HTML 标签中,在HTML中,可以使用下面的标签实现对应的属性,并且这些标签可以嵌套使用。标签用于定义段落,它可以将整个网页分为若干个段落。标签可以在网页上实现水平分割线的效果。注意,水平分割线标签为单标签。为文本分段可以使用段落标签。包裹需要放在一段的文字。标签表示换行,也可以用。在HTML中,常见用。

  • std::queue的使用

    定义于头文件 &lt;queue&gt; template&lt; class T, class Container = std::deque&lt;T&gt; &gt; class queue; std::queue 类是容器适配器,它给予程序员队列的功能——尤其是 FIFO (先进先出)数据结构。 类模板表现为底层容器的包装器一一只提供特定的函数集合。 queue 在底层容器尾端推入元素,从首端弹出元素。 模板形参 queue 模板类也需要两个模板参数,一个是元素类型,一个容...

  • BGP协议详解,路由通告原则 选路原则 报文 状态机 路由属性 RR反射器 BGP聚合

    BGP协议详解,路由通告原则 选路原则 报文 状态机 路由属性 RR反射器 BGP聚合

  • C++ 11 利用std::queue创建安全队列 等待队列

    头文件: #include &lt;mutex&gt; #include &lt;queue&gt; #include &lt;functional&gt; #include &lt;future&gt; #include &lt;thread&gt; #include &lt;utility&gt; #include &lt;vector&gt; #include &lt;condition_variable&gt; class SafeQueue { private: std::queue

  • windows 2016 Datacenter[数据中心]秘钥 序列号

    密 钥:8F3Y2-3NGPY-Y7GKM-4GYKT-YHBKV。

  • 华为-BGP路由技术

    BGP(TCP 179端口号)是一种运行在AS之间的动态路由协议主要作用在AS之间自动交换无环路由信息,消除路由环路并实施用户配置的路由策略网关路由协议分类IGP-内部网关路由协议:rip、ospf、is_isEGP-外部网关路由协议:BGPBGP的属性类别origin公有必遵as-path公有必遵next-hop公有必遵local pref公认任意community可选过渡med可选非过渡其中local-pref是宣告的同AS之内的,而MED是宣告给AS之间的。

  • 进制之间的输入

    输入一个十进制数num,转化为使用printf输出八进制,十六进制 无前缀方式: printf(&quot;%o&quot;,num)  //无前缀o的8进制数 printf(&quot;%x&quot;,num)  //无前缀0x的小写16进制数 printf(&quot;%X&quot;,num)  //无前缀0X的大写16进制数   有前缀方式: printf(&quot;%#o&quot;,num) //有前缀o的8进制数 printf(&quot;%#x&quot;,n...

  • C语言基础——%X(十六进制)的几种不同输出格式

    十六进制的输出格式控制符

  • windows server 2016 下域环境的搭建(完整版)

    windows server 2016 下域环境的搭建 在搭建之前简单介绍一下基础知识: 1.工作组:默认模式,人人平等,不方便管理 2.域:人人不平等,集中管理,统一管理 域中计算机的分类: 域控制器、成员服务器、客户机、独立服务器 域的部署: 安装域控制器-就生成了域环境 安装了活动目录-就生成了域控制器 活动目录:Active Directory =AD是指域环境中提供目录服务的组件。目录用于存储有关网络对象的信息。活动目录存储的是网络中所有资源的快捷方式,用户可以通过寻找快捷方式来定位资

  • 013_quick_qr

    QR俗称二维码, 上至商场, 下至煎饼摊, 都有它的身影~ 随着二维码的支付属性的发展, 金毛也走上街头, 开始了乞讨之路(发财致富之路) 其实,二维码可以帮我们做更多 首先安装二維碼生成器 (Quick QR) , 下载地址: https://chrome.google.com/webstore/detail/quick-qr-code-generator/afpbjjgbdimpi...

  • chrome浏览器中 F12 功能的简单介绍

        由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿!首先介绍Chrome开发者工具中,调试时使用最多的三个功能页面是:元素(ELements)、控制台(Console)、源代码(Sources),此外还有网络(Network)等。 元素(Elements):用于查看或修改HTML元素的属性、C...

  • Power BI Desktop(1)

    三、Power BI Desktop(1) 标签: 1Excel 1.安装 官网网址:https://powerbi.microsoft.com/zh-cn/desktop/ 步骤:登陆官网—高级下载选项—更改语言—下载插件 2.导入模型 1)模型:(power view、powerpivot、数据透视表) 方法:文件–导入—Excel表格 没有所需的文件时,点击右侧下拉按钮,勾选所有文件 ...

  • printf按8进制、16进制输出

    链接:http://blog.csdn.net/summer_liuwei/article/details/5464518 printf()8进制、16进制输出格式控制:     int num = 0x9;     /*输出4位8进制的num*/     printf("%04o/n",num);     /*输出2位16进制的num*/     prin

  • Numpy中向量的表示形式

    import numpy as np A = np.array([0, 8, 9]) print('A\n', A) print(A.shape)结果:A [ 0 8 -9] (3,)上面表示列向量A,元素的个数为3.import numpy as np B = np.array([0, 8, 9]).reshape(1, -1) print('B\n', B) print(B.shape)...

  • HTML中的6种空格标记

    HTML中的6种空格标记

Global site tag (gtag.js) - Google Analytics