阅读更多

10顶
0踩

编程语言

原创新闻 Rails 2.0 Preview Release

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

发表评论

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

相关推荐

  • CCleaner Professional v5.13(免注册码)中文版.rar

    软件介绍: 一款专业级的系统清洁器CCleaner Pro,可快速清理系统中的无用垃圾文件,清理浏览器各种记录各种隐私,清理打开过的文档痕迹,清理应用程序使用后留下的垃圾信息,清理注册表修复注册问题,可添加计划任务,在指定的时间进行自动清理,支持磁盘擦除可安全删除文件。这个小工具非常好用,而作者更新频率也比较频繁,每次更新都会增加新的内容。

  • 解决vue.js出现Vue.js not detected错误

    第一:在拓展应用的文件夹中找到文件manifest.json,打开并将此处的false改成true。 第二:在vuejs devtool拓展程序的详情页中开启以下两个选项 如果你看到这,恭喜你,看到全网解决这个问题的方法!!!! 以上都是网上有的,但是会有一个小坑, 让很多人。。。。痛。。。。不。。。。欲。。。。生! 看第三步打脸教程 第三:这一步初学者特别容易搞错,开启vuejs devtools程序之后,点击图标还是无法点亮图标。主要的原因是vuejs devtool必须要监视到页面

  • 【Visual Studio 2013中文语言包安装】

    因为需要,想要装一个VS2013的英文语言包,结果试来试去没成功。后来就想直接装一个自带英文语言包的得了,装完后发现界面不熟悉,操作起来不顺畅,又想办法装VS2013的中文语言包。试了好几个别人的法子没成功,现在分享一个VS2013的中文语言包装成功的办法。 一、下载VS2013英文语言包版本 进入微软主页 (链接:https://www.microsoft.com/zh-cn/) ①点击主页底部【Visual Studio】 。 ②在新界面点击【下载】。 ③在新界面下拉至中下位置,点击【较早的下..

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

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

  • CCleaner 破解版|CCleaner Pro专业破解版(附激活注册码)

    CCleaner Pro破解版是一款为电脑用户系统优化和隐私保护工具。软件主要用来清除Windows系统不再使用的垃圾文件,以腾出更多硬盘空间,用户可以通过此软件让你的电脑使用更加顺畅,还可以对文件夹、历史记录、回收站等进行垃圾清理,软件免费使用,支持包括简体中文在内的26国语言界面,不含任何间谍软件和垃圾程序!注:已经更新为2023最新版本,解压后使用注册即可激活。CCleaner专业破解版软件功能1、扫描清理注册表垃圾键值;2、清理临时文件夹、历史记录、回收站等垃圾信息;

  • 解决 No module named ‘tensorflow.examples.tutorials‘

    首先查看Python安装路径中文件夹是啥样的,我的是这样的: 安装路径: D:\SoftWare\Python3.8.3\InstallFile\Lib\site-packages 相信很多人文件夹都是这样的,并没有网上所谓的tensorflow_core文件夹,所以我们直接进入tensorflow文件夹里面,然后再进入core里面 然后再进入example里面 然后你会发现里面确实没有所谓的tutorials文件夹,所以直接从网上下载该文件夹,下载地址分享在这里: 链接:https://pan.b

  • Matplotlib绘图(1):figure,axes,subplot等函数解析

    Matplotlib学习记录:常用基本函数与绘图基本单位figure,axes,subplot等函数的解析,附带例子与代码

  • 中科星图——Sentinel-2_MSI_L2A数据集

    哨兵2号(Sentinel-2)卫星是高分辨率多光谱成像卫星,携带一枚多光谱成像仪(MSI),分为2A和2B两颗卫星,其中一颗卫星的重访周期为10天,两颗互补,重访周期为5天,主要用于包括陆地植被、土壤以及水资源、内河水道和沿海区在内的全球陆地观测。Sentinel-2_MSI_L2A数据集中的数据为L2A级产品数据,是经过大气校正的地表反射率产品,包括12个UINT16光谱带,还包含了场景分类产品、气溶胶光学厚度(AOT)、水蒸气及部分云和降雪概率产品,CLM波段是具有云掩码信息的位掩码频段。

  • VS 2013(Visual Studio 2013)基础使用方法

    点击Visual C++选择C++文件,图中文件名称后缀为.cpp是C++文件,本文用C语言进行编程学习因此文件名称后缀改为.c。在该界面右边找到解决方案资源管理器,右键点击源文件→添加→新建项添加源文件,如果有现有的源文件也可添加现有项。程序中getchar读入函数使得在输出结果后还可以用键盘输入字符,以回车键结束,这个代码写不写都行。如果没有找到解决方案资源管理器,点击工具栏中视图→解决方案资源管理器就行了。空项目打钩,按照上图配置选项,点完成,一个项目就创建好了,如图。在源文件中输入代码,保存。

  • 此系统环境变量太大,此对话框允许将值设置为 2047 个字符

    Windows 10/11 默认的环境变量编辑器有对变量的值长度限制,单个变量的值超过2047个字符会抛出“此环境变量太大。此对话框允许将值设置为最长2047个字符。" 的异常。

  • list_for_each_entry和list_for_each_entry_safe

    /**  * list_for_each_entry  -       iterate over list of given type  * @pos:        the type * to use as a loop cursor.  * @head:       the head for your list.  * @member:     the name of the list

  • 以太网PHY芯片LAN8720A芯片研究

    LAN8720A/LAN8720Ai是一个低功耗的可变I/O电压的10/100M PHY收发器,符合IEEE 802.3-2005标准,支持通过RMII接口与以太网MAC通信。LAN8720A/LAN8720Ai实现自动协商,自动确定最佳可能的速度和双工操作模式。HP Auto-MDIX支持允许使用直接连接或交叉局域网电缆。LAN8720A/LAN8720Ai既支持IEEE 802.3-2005标准,又支持厂商特有的注册功能。但是,操作不需要访问寄存器。初始配置可以通过“配置带”中描述的配置引脚选择。...

  • 两种无参考空间域图像噪点检测方法

    两种方法来源于Xinhao Liu和Masayuki Tanaka发表在IPIC上的三篇论文,先给出论文的链接: 《Noise Level Estimation Using Weak Textured Patches of a Single Noisy Image》 《Estimation Of Signal Dependent Noise Parameters From a Single Im

  • Matplotlib在figure中画矩形

    当您进行数据可视化时,您可能希望通过添加一些注释来突出显示绘图的特定区域。 在这篇文章中,我们将学习如何在 Python 中使用 制作的绘图上添加。 我们将首先添加一个具有特定颜色的简单矩形,然后学习如何用选择的颜色填充矩形。 接下来我们还将看到一个添加文本来描述添加矩形的示例。 最后我们将看到如何在 python 中的 matplotlib 绘图上添加多个矩形。 中的 模块允许我们在绘图顶部添加矩形等形状。 让我们将 加载为 。 之前,我们绘制了一个简单的矩形。现在,让我们以几种不同的方式对其进行自

  • 种子搜索uTorrent被发现存在重大漏洞

    在全球范围内拥有数百万名用户的BT客户端 uTorrent 日前已被谷歌旗下安全实验室发现存在重大安全漏洞。种子搜索漏洞。 攻击者借助谷歌研究人员发现的漏洞可将恶意软件植入用户电脑并设置开机自启动等待系统重启后自动运行。 本次安全漏洞涉及到uTorrent Windows版以及Web版本,这些软件存在认证方面的漏洞允许网站接管服务。

  • BM3D图像去噪算法原理及代码详解

    1. BM3D 算法简介 BM3D是2007年TIP的文章,题目是Image denoising by sparse 3D transform-domain collaborative ltering,论文、项目的地址是http://www.cs.tut.fi/~foi/GCF-BM3D/,提供matlab代码。 处理灰度图的BM3D以及它的变体CBM3D(彩色图)、VBM3D(时域)是图像去噪...

  • vue中移动端手风琴组件_Vue 2中的一个简单的手风琴菜单组件

    vue中移动端手风琴组件 Vue手风琴菜单 (vue-accordion-menu) Simple accordion menu component in Vue 2. Vue 2中的简单手风琴菜单组件。 现场演示 (Live Demo) https://weichiachang.github.io/vue-accordion-menu/dist/ https://weichiachang...

  • 2021年谷歌地球专业版使用方法,解决Google Earth无法连接服务器问题。

    1、安装运行谷歌地球专业版( Google Earth Pro v7.3)。 2、安装运行国家法律允许使用的VPN软件。 3、首次运行谷歌地球,需要点击“文件一 登录服务器”,如果软件界面显示黑屏。 4、选择“帮助一启动修复工具”。 5、先关闭谷歌地球软件,保留“修复Google地球界面”不要关闭。 6、选择“恢复默认设置”,窗口不要关闭。 7、在次运行谷歌地球软件,点击“文件一一登录服务器”, 稍等几秒钟熟悉的地球界面出来后,谷歌地球软件即可正常使用。如果谷歌地球软件无法运行,请在wi

  • Vue 三层菜单栏中,菜单的展开和收起问题的解决办法

    例如我们有这样一列菜单 &lt;el-menu&gt; &lt;el-submenu index="1"&gt; &lt;template slot="title"&gt;&lt;i class="el-icon-date"&gt;&lt;/i&gt;一级菜单1&lt;/template&gt; &lt;el-submenu index=...

Global site tag (gtag.js) - Google Analytics