精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

大改動小變化 Ruby On Rails 3蓄勢待發(fā)

開發(fā) 后端
在這篇文章中,您將會了解Rails 3及其眾多變化和附加功能,以及如何從頭創(chuàng)建一個新的Rails 3應(yīng)用程序。就在不久前,開發(fā)團隊已經(jīng)發(fā)布了Ruby on Rails 3.0 RC版本。

在過去的兩年中,Ruby on Rails應(yīng)用程序框架已經(jīng)具備了一個由托管和服務(wù)提供商組成的一體式行業(yè)、一套功能廣泛且令人印象深刻的開發(fā)工具,還有各種在Ruby 用語里稱為gems和plug-ins的補充庫 — 可增強軟件的功能。

自 2007年以來,Rails 社區(qū)也已不斷壯大。全球有眾多的Rails開發(fā)人員充滿活力、團結(jié)互助,并且渴望不斷地改進該軟件。可以毫不夸張地說,Rails 的改進應(yīng)歸功于社區(qū),因為是程序員之間不斷的相互超越使得構(gòu)建出的軟件越來越完善。如此不斷地循環(huán),各個功能才得以從初期階段快速發(fā)展,逐漸變的實用、功能不斷強大并完善,最終成為不可或缺的工具。

在很多情況下,社區(qū)認(rèn)為最基本的 gems 和 plug-ins 都會保留到 Rails 核心中。Rails 的 named scopes(一個查詢快捷方式),可實現(xiàn)與 nested forms 相同的功能。這是一個新增的功能,可取代以前的嘗試,并在相同的 HTML 表單中創(chuàng)建和編輯多個模型。實際上,對于 Rails 開發(fā)人員來說最困難的任務(wù)或許就是跟上變化的節(jié)奏。

Rails下一個主要的發(fā)布是Rails版本3,該版本繼續(xù)保持工具包的快速改進。與以往相同,該軟件仍然非常 “固執(zhí)”,即仍然偏向于約定優(yōu)于配置。Rails 的核心組件始終存在,即 RESTful 路徑、關(guān)系、驗證、模板和數(shù)據(jù)庫抽象化。不過,這些組件的許多內(nèi)部內(nèi)容已經(jīng)被重寫或者進行了改進。最明顯的并且很大程度上借用了 Merb 的理念的就是很多 Rails 的基本功能不再密切結(jié)合。

例如,以前只對 Rails 應(yīng)用程序可用的數(shù)據(jù)驗證便捷功能現(xiàn)在成為獨立的組件,并且可以包含在 Vanilla Ruby 代碼中。如呈現(xiàn)部件和模板等控制器功能,現(xiàn)在也是相互獨立的,并且可以嵌入到任一庫中。

大改動、小變化

Rails 3中變動的數(shù)量太多,無法在此全部列出。此處,僅介紹一些很可能會影響到開發(fā)人員的一些變動:

Ruby On Rails 3發(fā)布說明:http://edgeguides.rubyonrails.org/3_0_release_notes.html

◆一條命令可以控制所有事件。有了 Rails 3,無需在每一個應(yīng)用程序中使用整套腳本(script/server、script/generate 以及其他),使用一條命令即可取代其功能,該命令恰如其分地被命名為 rails。例如,在以前需要鍵入 ./script/console 的地方,您現(xiàn)在只需鍵入 rails console。rails 命令還可以像以前一樣生成新的應(yīng)用程序。其運行方式依據(jù)其是否在現(xiàn)有的 Rails 應(yīng)用程序中啟動而有所不同。

◆可為依賴性提供具體的解決方案。協(xié)調(diào)和解決 gem 依賴性是個棘手的問題。與可用 gems 的集合一樣,gem 的修訂也是隨系統(tǒng)的不同而有所變化。因為具有這樣的多樣化,所以很難廣泛地部署或共享一個 Rails 應(yīng)用程序。Rails 3 引入了 Bundler,這是一個專門用于管理依賴性的實用程序(因此無需再使用 config.gem)。您可以在應(yīng)用程序根目錄內(nèi)一個名為 Gemfile 的目錄中聲明依賴性。Bundler 將下載和存儲所有指定的 gem。您甚至可以在應(yīng)用程序中 “打包” gem ,以便阻止從外部存儲庫下載。

◆不帶查詢語句的查詢功能。一直以來,Rails 已經(jīng)可以充分運用特定于領(lǐng)域的語言 (DSL) — 考慮一下 has_one 或 validates_numericality_of — 有一個明顯的例外:數(shù)據(jù)庫查詢。可以確定地說,Rails 的動態(tài)搜尋器便捷、易用,但混合使用選項哈希值如 :conditions、:order 和 :limit 非常常見,因為都是 find_by_sql 語句。Rails 3 合并了 relational algebra,這是專門設(shè)計用于表示查詢的 DSL。基本命令包括 project(用于選擇列)、where(用于表示條件)、join(用于指定關(guān)系)、take 和 skip(分別用于限定和抵消),以及 group(用于聚集)等其他屬性。

用于模糊樣板代碼的控制器。Rails控制器的核心操作—new、create、edit和update—通常不變,尤其是當(dāng)控制器大部分用于CRUD操作時。事實上,控制器生成器的輸出 ./script/generate controller一般不需要進一步的修改就可以滿足需要。考慮到這些相似性,Rails 3引入了Responder來進一步簡化代碼。例如下面是create操作全部所需的幾行代碼:  

  1. class PostsController  
  2.    respond_to :html, :xml  
  3.  
  4.    def create  
  5.      @post = Post.create(params[:post])  
  6.      respond_with(@post)  
  7.    end  
  8.  end  

在該代碼片段中,如果@post保存成功,respond_with(@post) 將發(fā)送到show以顯示新的記錄,而假設(shè)對象的驗證失敗,則發(fā)送到new。這僅僅是一個小樣本。您可以在下一章節(jié)找到這些新功能的示例以及更多內(nèi)容,例如從頭構(gòu)建Rails 3應(yīng)用程序。

#p#

***構(gòu)建 Rails 3應(yīng)用程序

要運行 Rails 3,您的系統(tǒng)必須安裝有Ruby 1.8.7版或 Ruby 1.9.2 版,或者該編程語言的較新版本及其附加庫和解釋程序。您的機器上***同時安裝有 Git 軟件版本控制系統(tǒng),因為 Rails 3 和許多其他重要的 Rails 項目都是在 Git 中進行維護的。您的系統(tǒng)還需要數(shù)據(jù)庫引擎,例如 SQLite(版本 3)、MySQL 或者 PostgreSQL。開發(fā) Rails 應(yīng)用程序時,Web 服務(wù)器不是必須的,但它通常是生產(chǎn)部署的一部分。

要創(chuàng)建 Rails 3 應(yīng)用程序,您必須擁有Rails 3預(yù)發(fā)布gem和所有其相關(guān)產(chǎn)品。這時,您只需通過運行幾條命令(請參閱 清單 1)即可安裝所需的組件。(在您繼續(xù)進行之前請查看 Rails 3 文檔,因為根據(jù)版本的不同具體的操作會有所不同。)

  1. 清單 1. Rails 3 預(yù)發(fā)布 gem 和相關(guān)產(chǎn)品  
  2. $ gem install rails3b  
  3. Due to a rubygems bug, you must uninstall all older versions of bundler for 0.9 to work  
  4. Successfully installed mime-types-1.16  
  5. Successfully installed mail-2.1.2  
  6. Successfully installed text-hyphen-1.0.0  
  7. Successfully installed text-format-1.0.0  
  8. Successfully installed memcache-client-1.7.8  
  9. Successfully installed rack-1.1.0  
  10. Successfully installed rack-mount-0.4.7  
  11. Successfully installed abstract-1.0.0  
  12. Successfully installed erubis-2.6.5  
  13. Successfully installed i18n-0.3.3  
  14. Successfully installed tzinfo-0.3.16  
  15. Successfully installed bundler-0.9.5  
  16. Successfully installed thor-0.13.1  
  17. Successfully installed rails3b-3.0.1  
  18. 14 gems installed  
  19.  
  20. $ gem install arel --pre  
  21. Successfully installed activesupport-3.0.0.beta  
  22. Successfully installed arel-0.2.pre  
  23. 2 gems installed  
  24.  
  25. $ gem install rails --pre  
  26. Successfully installed activemodel-3.0.0.beta  
  27. Successfully installed actionpack-3.0.0.beta  
  28. Successfully installed activerecord-3.0.0.beta  
  29. Successfully installed activeresource-3.0.0.beta  
  30. Successfully installed actionmailer-3.0.0.beta  
  31. Successfully installed railties-3.0.0.beta  
  32. Successfully installed rails-3.0.0.beta  
  33. 7 gems installed 

下一步是生成應(yīng)用程序 — 在 清單 2 中顯示了一個小 wiki。該應(yīng)用程序創(chuàng)建并管理文章。每一篇文章都有一個標(biāo)題和一些散文,通過從現(xiàn)有頁面的正文創(chuàng)建一個指向新文章的引用,您即可創(chuàng)建一篇新的文章。引用可以是任一駝峰式大小寫單詞,例如 TheSolarSystem 或者 TheOscars。

注意:可通過下面的 下載 表格獲取該 wiki 應(yīng)用程序的源代碼。

  1. 清單 2. Wiki Rails 應(yīng)用程序  
  2. $ rails wiki 

如果您運行了 ls -lR 來查看應(yīng)用程序的內(nèi)容,將會顯示一些新文件:

◆Gemfile,即前面曾提到的 gem 清單。該文件必須至少包含兩行:一行指向 Rails 3 beta gem 的源,另一行則綁定 Rails 3 beta gem 本身。您或許還需要第三行(至少)以連接數(shù)據(jù)庫:

  1. source 'http://gemcutter.org'  
  2. gem "rails", "3.0.0.beta"  
  3. gem "sqlite3-ruby", :require => "sqlite3" 

◆config/application.rb,它包含 config/environment.rb 中以前提供的很多選項。雖然后者仍然保留,但很大程度上已不再使用該文件。config/application.rb 的一個顯著的附加功能是 generators block:

  1. config.generators do |g|  
  2.   g.orm             :active_record  
  3.   g.template_engine :erb  
  4.   g.test_framework  :test_unit, :fixture => true  
  5. end 

您的 Rails 3 應(yīng)用程序可以使用一些兼容的對象關(guān)系映射器 (ORM)、模板引擎和測試框架。生成器塊會指定應(yīng)用程序的***項,并根據(jù)您的模型、視圖等調(diào)用適當(dāng)?shù)纳善鳌?/p>

◆db/seeds.rb,該文件對于 Rails 3 來說并不是新增的,但卻有必要著重介紹一下,因為它是最近不久剛增加的功能(在 Rails 2.3.4 版引入的)。如果您的應(yīng)用程序需要初始數(shù)據(jù)以正常運行,例如一個管理用戶、價格代碼或靜態(tài)頁面,那么您可以在 db/seeds.rb 中創(chuàng)建這些數(shù)據(jù)并運行任務(wù) rake db:seed。在 Seed 文件之前,不存在初始化的慣例,許多開發(fā)人員把代碼放入遷移中,這樣容易混淆創(chuàng)建數(shù)據(jù)庫和填充數(shù)據(jù)庫之間的不同之處。

◆config.ru,存在于每個 Rails 3 應(yīng)用程序的根目錄下,即所謂的 rackup 文件,也就是基于 Rack 的應(yīng)用程序的配置文件。Rails 3 是一個 Rack 應(yīng)用程序,并且與任一支持 Rack 的 Web 服務(wù)器相兼容。總的來說,除非您想要添加其他 Rack 組件,否則請不要更改 config.ru 文件。

還有一些其他新文件;不過大多數(shù)看上去與 Rails 版本 2.3 相似。config/routes.rb 文件的功能與以往相同,只不過更加簡化、更具有 Ruby 的特色。您將很快會看到一個示例。

生成應(yīng)用程序并編輯 Gemfile 以聲明依賴性之后,下一步就是收集應(yīng)用程序所需的 gem。這是由新的實用程序 bundle(請參閱 清單 3)來完成的工作。

  1. 清單 3. 收集所需的gem  
  2. $ bundle  
  3. installFetching source index from http://gemcutter.org  
  4. Resolving dependencies  
  5. Installing abstract (1.0.0) from system gems  
  6. Installing actionmailer (3.0.0.beta) from system gems  
  7. Installing actionpack (3.0.0.beta) from system gems  
  8. Installing activemodel (3.0.0.beta) from system gems  
  9. Installing activerecord (3.0.0.beta) from system gems  
  10. Installing activeresource (3.0.0.beta) from system gems  
  11. Installing activesupport (3.0.0.beta) from system gems  
  12. Installing arel (0.2.1) from rubygems repository at http://gemcutter.org  
  13. Installing builder (2.1.2) from system gems  
  14. Installing bundler (0.9.7) from rubygems repository at http://gemcutter.org  
  15. Installing erubis (2.6.5) from system gems  
  16. Installing i18n (0.3.3) from system gems  
  17. Installing mail (2.1.2) from system gems  
  18. Installing memcache-client (1.7.8) from system gems  
  19. Installing mime-types (1.16) from system gems  
  20. Installing rack (1.1.0) from system gems  
  21. Installing rack-mount (0.4.7) from system gems  
  22. Installing rack-test (0.5.3) from system gems  
  23. Installing rails (3.0.0.beta) from system gems  
  24. Installing railties (3.0.0.beta) from system gems  
  25. Installing rake (0.8.7) from system gems  
  26. Installing sqlite3-ruby (1.2.5) from rubygems repository at  
  27.     http://gemcutter.org with native extensions  
  28. Installing text-format (1.0.0) from system gems  
  29. Installing text-hyphen (1.0.0) from system gems  
  30. Installing thor (0.13.3) from rubygems repository at http://gemcutter.org  
  31. Installing tzinfo (0.3.16) from system gems  
  32. Your bundle is complete! 

該bundle實用程序,簡稱 Bundler,可用于下載和安裝所有在 Gemfile 中指定的 gem 以及任何這些 gems 的依賴項(請參閱 清單 4)。該 bundle 實用程序還可以將所有依賴項復(fù)制到您的應(yīng)用程序中,使得您的代碼庫自給自足。具體來說,如果您運行 bundle pack,Bundler 會將所有 gem 的資料復(fù)制到 vendor/cache。

  1. 清單 4. 運行 bundle 實用程序  
  2. $ bundle pack  
  3. Copying .gem files into vendor/cache  
  4.   * bundler-0.9.7.gem  
  5.   * thor-0.13.3.gem  
  6.   * abstract-1.0.0.gem  
  7.   * mime-types-1.16.gem  
  8.   * text-hyphen-1.0.0.gem  
  9.   * rack-mount-0.4.7.gem  
  10.   * rake-0.8.7.gem  
  11.   * text-format-1.0.0.gem  
  12.   * tzinfo-0.3.16.gem  
  13.   * rack-test-0.5.3.gem  
  14.   * builder-2.1.2.gem  
  15.   * erubis-2.6.5.gem  
  16.   * memcache-client-1.7.8.gem  
  17.   * rack-1.1.0.gem  
  18.   * sqlite3-ruby-1.2.5.gem  
  19.   * i18n-0.3.3.gem  
  20.   * activesupport-3.0.0.beta.gem  
  21.   * arel-0.2.1.gem  
  22.   * mail-2.1.2.gem  
  23.   * activemodel-3.0.0.beta.gem  
  24.   * activerecord-3.0.0.beta.gem  
  25.   * actionpack-3.0.0.beta.gem  
  26.   * railties-3.0.0.beta.gem  
  27.   * actionmailer-3.0.0.beta.gem  
  28.   * activeresource-3.0.0.beta.gem  
  29.   * rails-3.0.0.beta.gem  
  30.  
  31. $ ls vendor/cache  
  32. abstract-1.0.0.gem  memcache-client-1.7.8.gem  
  33. actionmailer-3.0.0.beta.gem mime-types-1.16.gem  
  34. actionpack-3.0.0.beta.gem rack-1.1.0.gem  
  35. activemodel-3.0.0.beta.gem rack-mount-0.4.7.gem  
  36. activerecord-3.0.0.beta.gem rack-test-0.5.3.gem  
  37. activeresource-3.0.0.beta.gem rails-3.0.0.beta.gem  
  38. activesupport-3.0.0.beta.gem railties-3.0.0.beta.gem  
  39. arel-0.2.1.gem   rake-0.8.7.gem  
  40. builder-2.1.2.gem  sqlite3-ruby-1.2.5.gem  
  41. bundler-0.9.7.gem  text-format-1.0.0.gem  
  42. erubis-2.6.5.gem  text-hyphen-1.0.0.gem  
  43. i18n-0.3.3.gem   thor-0.13.3.gem  
  44. mail-2.1.2.gem   tzinfo-0.3.16.gem 

將vendor/cache視為應(yīng)用程序自己的gem存儲庫。您可以將代碼庫移動到任何地方,并可以獲得您所需的gem軟件和版本 — 無需遠程存儲器即可實現(xiàn)。例如,如果您在 bundle pack之后運行bundle install,gem會從您的應(yīng)用程序存儲庫安裝到您的系統(tǒng)中(請參閱 清單 5)。

  1. 清單 5. 安裝 gem  
  2. Fetching source index from http://gemcutter.org  
  3. Resolving dependencies  
  4. Installing abstract (1.0.0) from .gem files at  
  5.   /Users/strike/projects/rails3/wiki/vendor/cache  
  6. Installing actionmailer (3.0.0.beta) from .gem files at  
  7.   /Users/strike/projects/rails3/wiki/vendor/cache  
  8. Installing actionpack (3.0.0.beta) from .gem files at  
  9.   /Users/strike/projects/rails3/wiki/vendor/cache  
  10. ...  
  11. Installing thor (0.13.3) from .gem files at  
  12.   /Users/strike/projects/rails3/wiki/vendor/cache  
  13. Installing tzinfo (0.3.16) from .gem files at  
  14.   /Users/strike/projects/rails3/wiki/vendor/cache  
  15. Your bundle is complete! 

#p#

使用wiki

要創(chuàng)建應(yīng)用程序,則需要為頁面生成一個工作框架(scaffold)、創(chuàng)建數(shù)據(jù)庫、將初始頁面放到數(shù)據(jù)庫并且設(shè)定所需的路徑(請參閱 清單 6)。為了簡單化,僅限在某些字段使用 wiki 頁面記錄:標(biāo)題、標(biāo)頭(標(biāo)題的縮略語)、正文和時間截(以用于記錄頁面的創(chuàng)建時間和***修改時間)。標(biāo)題和標(biāo)頭是字符串字段;散文是文本字段;時間截是日期和時間字段。(當(dāng)然,一個真正的 wiki 還會有其他字段,如最近的作者以及頁面的修訂歷史記錄。為了盡量簡潔,該例子還省略了用戶和會話、格式以及各種身份驗證和授權(quán)。)您可以使用 rails generate scaffold 命令生成一個初始模型、一系列視圖以及一個控制器。

  1. 清單 6. 完整的 wiki 應(yīng)用程序  
  2. $ rails generate scaffold page title:string slug:string body:text --timestamps  
  3.       invoke  active_record  
  4.       create    db/migrate/20100221115613_create_pages.rb  
  5.       create    app/models/page.rb  
  6.       invoke    test_unit  
  7.       create      test/unit/page_test.rb  
  8.       create      test/fixtures/pages.yml  
  9.        route  resources :pages  
  10.       invoke  scaffold_controller  
  11.       create    app/controllers/pages_controller.rb  
  12.       invoke    erb  
  13.       create      app/views/pages  
  14.       create      app/views/pages/index.html.erb  
  15.       create      app/views/pages/edit.html.erb  
  16.       create      app/views/pages/show.html.erb  
  17.       create      app/views/pages/new.html.erb  
  18.       create      app/views/pages/_form.html.erb  
  19.       create      app/views/layouts/pages.html.erb  
  20.       invoke    test_unit  
  21.       create      test/functional/pages_controller_test.rb  
  22.       invoke    helper  
  23.       create      app/helpers/pages_helper.rb  
  24.       invoke      test_unit  
  25.       create        test/unit/helpers/pages_helper_test.rb  
  26.       invoke  stylesheets  
  27.       create    public/stylesheets/scaffold.css 

如果您想知道 ./script/generate 命令有何變化,回憶一下,該命令已經(jīng)被全能的 rails 命令包含了。運行rake db:create db:migrate 以創(chuàng)建數(shù)據(jù)庫:

  1. $ rake db:create db:migrate 
  2. ==  CreatePages: migrating ====================================================  
  3. -- create_table(:pages)  
  4.    -> 0.0010s 
  5. ==  CreatePages: migrated (0.0011s) =========================================== 

該Wiki現(xiàn)已存在,但卻是空的。添加一個初始頁面作為所有其他頁面的基準(zhǔn)。編輯文件 db/seeds.rb,并編寫代碼以創(chuàng)建一個新的頁面,如 清單 7 中所示:

  1. 清單 7. wiki 基準(zhǔn)頁面  
  2. Page.create(  
  3.   :title    => 'The Marx Brothers Wiki',  
  4.   :slug     => 'Home',  
  5.   :body     => 'An encyclopedic guide to the Marx Brothers.') 

運行 rake db:seed 以執(zhí)行代碼。您可以通過使用 rails console 快速瀏覽以驗證頁面,如 清單 8 中所示。

  1. 清單 8. 驗證基準(zhǔn)頁面  
  2. $ rake db:seed  
  3. (in /Users/strike/projects/rails3/wiki)  
  4.  
  5. $ rails console  
  6. Loading development environment (Rails 3.0.0.beta)  
  7. irb(main):001:0> Page.all 
  8. => [#<Page id: 1, title: "The Marx Brothers Wiki", slug: "Home",  
  9.     body: "An encyclopedic guide to the Marx Brothers.",  
  10.     created_at: "2010-02-21 12:24:43", updated_at: "2010-02-21 12:24:43">

在繼續(xù)運行編碼之前,請先設(shè)定路徑。需要兩條路徑:一條默認(rèn)的路徑用來查找主頁面,而另外一條路徑則通過標(biāo)頭來查找頁面。清單 9 顯示了最終版的 config/routes.rb 文件。

  1. 清單 9. config/routes.rb(最終版)  
  2. Wiki::Application.routes.draw do |map|  
  3.   resources :pages  
  4.   root :to => "pages#show"  
  5. end 

在清單 6中,rails generate scaffold page 這一行命令可自動在第二行創(chuàng)建路徑,這是 REST 式的。您必須在第三行手動添加路徑。用于指定站點路徑的默認(rèn) “根目錄” 的語法是 Rails 3 中的新增功能。第三行定義的是,“將路徑 ‘/’ 映射到頁面控制器的 ‘show’ 方法”。show 方法的代碼將在數(shù)據(jù)庫中查找主頁面并顯示出來。添加新的根目錄路徑后,需要刪除 public/index.html 文件以避免產(chǎn)生沖突:

  1. $ rm public/index.html
  2.  

現(xiàn)在,讓我們來關(guān)注頁面控制器。Rails 3 中的控制器代碼可以極其簡單。清單 10 通過單一的 show 方法,顯示了控制器的初始實現(xiàn)。

  1. 清單 10. Rails 3 控制器  
  2. class PagesController < ApplicationController 
  3.   respond_to :html  
  4.  
  5.   def show  
  6.     @page = Page.where( :slug => ( params[:id] || 'Home' ) ).first  
  7.     respond_with( @page )  
  8.   end  
  9. end  

正如您所看到的,通常在 Rails 2 控制器中提供的所有模板都不見了。respond_to 列出了控制器所支持的格式;此處,它僅會對 HTML 的請求做出反應(yīng)。respond_with 是邏輯快捷方式,用于決定控制器應(yīng)如何繼續(xù)處理。

查詢的語法也是大有不同。查詢是 Rails 3 關(guān)系代數(shù)的一個示例。您可能會想知道為什么需要有 first 后綴。where 和其他表達查詢的操作數(shù)并不會真正引起查詢語句被執(zhí)行。相反地,查詢站點一直閑置,直到真正需要數(shù)據(jù)時才啟動。這就是延遲加載,即盡可能長的延遲查詢語句的執(zhí)行。first 命令將觸發(fā)數(shù)據(jù)庫中的實際查詢。

如果您現(xiàn)在運行應(yīng)用程序,您會看到與 圖 1 相似的情況,現(xiàn)在,您可以向控制器中添加更多的代碼。清單 11 顯示了完整的控制器。

圖 1

  1. 清單 11. 完整的 Rails 3 控制器  
  2. class PagesController < ApplicationController 
  3.   respond_to :html  
  4.   before_filter :get_page, :except => [ :create ]  
  5.  
  6.   def create  
  7.     respond_with( @page = Page.create( params[ :page ] ) )  
  8.   end  
  9.  
  10.   def edit  
  11.   end  
  12.  
  13.   def index  
  14.     render :action => :show  
  15.   end  
  16.  
  17.   def show  
  18.     @page ||= Page.new( :slug => params[ :id ] )  
  19.  
  20.     if @page.new_record?  
  21.       render :action => :new  
  22.     else  
  23.       respond_with( @page )  
  24.     end  
  25.   end  
  26.  
  27.   def update  
  28.     @page.update_attributes( params[ :page ] )  
  29.     respond_with( @page )  
  30.   end  
  31.  
  32.   private  
  33.  
  34.     def get_page  
  35.       @page = Page.where( :slug => ( params[:id] || 'Home' ) ).first ||  
  36.         Page.where( :id => params[:id] ).first  
  37.     end  
  38. end 

在該控制器中,index 方法僅僅反映沒有頁面標(biāo)示符的 show 操作,從而呈現(xiàn)主頁面。show 會顯示一個頁面,并提供一個 ID 或標(biāo)頭(所有操作的查詢都集中在 get_page 中,從而進一步減少了代碼的數(shù)量);如果某個頁面不存在,則會準(zhǔn)備一個新的頁面以供進行編輯。Page模型僅僅可以驗證所有顯示的字段:

  1. class Page > ActiveRecord::Base  
  2.   validates_presence_of :body, :slug, :title  
  3. end 

將駝峰式大小寫引用轉(zhuǎn)換為指向其他頁面的鏈接,這一工作是在 Page 模型的視圖中進行的。由 app/helpers/pages_helper.rb 中的 helper 函數(shù)來完成這一工作,從而保持視圖的最小化(請參閱 清單 12)。

  1. 清單 12. 駝峰式大小寫轉(zhuǎn)換 helper 函數(shù)  
  2. module PagesHelper  
  3.   def wikify( page )  
  4.     return '' if page.body.blank?  
  5.     page.body.gsub( /^([A-Z][[:alnum:]]*([A-Z][[:alnum:]]*)+)/ ) do |match|  
  6.       link_to( $1, :action => :show, :id => $1 )  
  7.     end  
  8.   end  
  9. end 

該視圖是典型的視圖,如清單 13中所示。

  1. 清單 13. 典型視圖  
  2. <p> 
  3.   <b>Title:b> 
  4.   <%= @page.title %> 
  5. p> 
  6.  
  7. <p> 
  8.   <b>Body:b> 
  9.   <%= raw wikify( @page ) %> 
  10. p> 
  11.  
  12. <%= link_to 'Edit', edit_page_path(@page) %> |  
  13. <%= link_to 'Back', pages_path %> 

raw操作數(shù)是Rails 3中新增的功能。與以前版本的Rails不同,默認(rèn)情況下所有的字符串都可以(去掉了HTML)安全發(fā)送。如果要通過HTML發(fā)送一個字符串,則必須使用 raw。

切換Rails

除了此處所介紹的功能改進和便捷性,Rails 3還提供了比以前版本更佳的性能,尤其是在呈現(xiàn)部件方面。您還可以創(chuàng)建您專有的驗證器類,并充分利用更為流暢的標(biāo)準(zhǔn)驗證。例如,由 Jeremy McAnally 編寫以下驗證,一次需要四行單獨的代碼:

  1. validates :login, :presence => true, :length => {:minimum => 4},  
  2.   :uniqueness => true, :format => { :with => /[A-Za-z0-9]+/ }  

 

【編輯推薦】

  1. 基于Ruby On Rails開發(fā)高品質(zhì)Web應(yīng)用
  2. Ruby on Rails 3.0 RC發(fā)布 解決Web編碼問題
  3. Ruby on Rails應(yīng)用技巧全解析 
責(zé)任編輯:王曉東 來源: IBM DW
相關(guān)推薦

2013-10-08 15:49:04

2011-03-30 13:34:07

Firefox 4.2

2021-05-28 16:39:29

RSAC2021

2012-06-19 09:39:51

VMware

2018-03-06 09:49:28

云計算PaaSIaaS

2009-11-06 10:02:37

接入網(wǎng)技術(shù)

2012-06-05 10:02:59

大數(shù)據(jù)R語言

2009-08-20 10:16:41

2009-06-29 10:03:05

WLAN802.11n無線網(wǎng)絡(luò)

2012-10-15 10:17:22

2012-07-24 10:18:29

IPv4IPv6

2016-10-26 11:59:21

華為智慧城市

2013-04-19 10:34:08

2014-09-01 10:08:56

華為HCC

2011-04-08 09:31:57

平板電腦版Chrome

2010-04-28 13:50:40

Ubuntu 10.0

2022-04-14 12:25:13

深度學(xué)習(xí)方程AI

2016-11-15 14:38:56

大數(shù)據(jù)應(yīng)用數(shù)據(jù)革命

2021-03-11 14:15:27

數(shù)字化轉(zhuǎn)型IT科技

2013-07-16 14:39:25

飛魚星無線云飛魚星路由器飛魚星
點贊
收藏

51CTO技術(shù)棧公眾號

国产.欧美.日韩| 欧美日韩18| 欧美日韩成人一区| 欧美xxxx吸乳| 亚洲av毛片成人精品| 日韩av中文在线观看| 久热99视频在线观看| 中文乱码人妻一区二区三区视频| 456亚洲精品成人影院| 成人欧美一区二区三区1314 | 日本中文字幕网| 天堂综合网久久| 制服丝袜在线91| 各处沟厕大尺度偷拍女厕嘘嘘| 永久免费av在线| 成人动漫一区二区在线| 国产色视频一区| 天堂网av手机版| 欧美 日韩 国产一区二区在线视频| 日韩精品视频免费| 中文字幕乱妇无码av在线| 国产在线看片免费视频在线观看| 亚洲欧洲一区二区在线播放| 欧美日韩视频在线一区二区观看视频| 国产成a人亚洲精v品无码| 久久一区国产| 97色在线播放视频| av激情在线观看| 国产不卡一二三区| 亚洲国模精品私拍| 26uuu国产| 国产不卡精品在线| 欧美探花视频资源| 美女av免费在线观看| 色呦呦呦在线观看| 国产精品福利一区二区| 欧洲精品久久| 日本亚洲欧美| 成人高清免费观看| 成人蜜桃视频| 亚洲va久久久噜噜噜无码久久| 日韩精品一二三四| 国产xxx69麻豆国语对白| 国产精品7777777| 国产精品av久久久久久麻豆网| 精品国偷自产在线视频| 亚洲一级黄色录像| 欧美裸体在线版观看完整版| 精品伊人久久97| yy6080午夜| 开心激情综合| 亚洲精品电影网在线观看| 潘金莲一级淫片aaaaaaa| gogo大尺度成人免费视频| 欧美日韩美少妇| 男人添女人下面免费视频| 美女色狠狠久久| 精品视频在线看| 欧美美女一级片| 24小时成人在线视频| 51精品久久久久久久蜜臀| 在线视频观看91| 日本高清精品| 亚洲黄色在线看| 亚洲一区二区三区蜜桃| 国内精品久久久久久久久电影网| 亚洲天堂网站在线观看视频| 国产精品情侣呻吟对白视频| 日韩中文在线电影| 美女扒开尿口让男人操亚洲视频网站| 亚洲欧美小视频| 在线欧美一区| 欧美专区中文字幕| 中文字幕一区二区三区人妻四季 | 国产在线观看一区二区三区| 国产亲伦免费视频播放| 大美女一区二区三区| 国产综合 伊人色| 国产视频福利在线| 亚洲色大成网站www久久九九| 久久综合亚洲精品| 亚洲天堂av在线| 欧美日韩精品欧美日韩精品一综合| 色呦色呦色精品| caoporn成人| 亚洲美女av电影| 强制高潮抽搐sm调教高h| 欧美日本一区二区视频在线观看| 欧美在线一级va免费观看| 中文天堂在线播放| 国产99精品在线观看| 欧美日韩无遮挡| bt在线麻豆视频| 欧美色另类天堂2015| 国产精品v日韩精品v在线观看| 日韩一级淫片| 一二美女精品欧洲| 久久网中文字幕| 日韩电影在线一区| 国产高清精品一区二区| 成年人视频免费在线观看| 一区二区三区四区五区视频在线观看 | 成年人小视频在线观看| 国产成人调教视频在线观看| 欧美人交a欧美精品| 一级片在线免费播放| 大胆亚洲人体视频| 一区二区三区四区五区视频| 高清在线视频不卡| 51午夜精品国产| 在线免费看黄视频| 黄色亚洲大片免费在线观看| 国产精品久久激情| 午夜一区在线观看| 一区二区三区四区激情| 小泽玛利亚视频在线观看| 日韩av午夜| 久精品免费视频| 日批视频免费观看| 久久色在线观看| 精品人妻少妇一区二区| 24小时成人在线视频| 原创国产精品91| 日本免费在线观看视频| 成人黄色av电影| 今天免费高清在线观看国语| 欧美高清你懂的| 亚洲无亚洲人成网站77777| 国产成人亚洲精品自产在线 | 呦呦在线视频| 欧美男同性恋视频网站| 中文字幕伦理片| 老司机精品视频网站| 精品无人乱码一区二区三区的优势| a视频在线观看免费| 欧美日韩国产精品自在自线| 性欧美一区二区| 久久精品一区| 欧美男人的天堂| 国产伦精品一区二区三区视频金莲| 亚洲国产日韩欧美在线图片| 国产系列精品av| 成人污污视频在线观看| 女人帮男人橹视频播放| 大桥未久女教师av一区二区| 欧美激情在线视频二区| 韩国中文字幕hd久久精品| 亚洲综合成人在线| 永久免费未满蜜桃| 国产亚洲毛片| 久久一区二区三区av| 亚洲黄色免费av| 亚洲欧美日韩爽爽影院| 亚洲无码精品一区二区三区| 欧美经典一区二区| 手机免费av片| 欧美激情视频一区二区三区在线播放 | 日本一区二区成人| 成年网站在线播放| 天天做天天爱天天综合网| 91丝袜美腿美女视频网站| 国产剧情在线| 欧美v亚洲v综合ⅴ国产v| 国产精品6666| 久久先锋影音av| 精品999在线| 欧美黄色大片在线观看| 亚洲xxxx3d| 黄色在线网站噜噜噜| 亚洲天堂成人在线视频| 97人妻精品一区二区三区软件 | 日韩在线观看a| 天天躁日日躁狠狠躁欧美| 国产精品高清网站| 成人高清免费在线| 亚洲成人a级网| 伊人久久久久久久久久久久 | 日韩精品手机在线| 国产欧美一区二区精品忘忧草 | 高清一区二区三区| 国产精品吹潮在线观看| 97影院秋霞午夜在线观看| 亚洲成在人线av| 国产污视频网站| 亚洲欧美日韩国产中文在线| 精品国产一区在线| 欧美aaaaaa午夜精品| 中文字幕日韩精品无码内射| 日韩av影院| 91在线观看欧美日韩| 国产直播在线| xx视频.9999.com| 天天av综合网| 3d动漫精品啪啪| 欧美a∨亚洲欧美亚洲| 日韩一区在线看| 一本加勒比北条麻妃| 国产米奇在线777精品观看| 激情综合在线观看| 欧美日韩免费| 亚洲欧美综合一区| 日韩精品免费一区二区三区竹菊| 91精品国产综合久久久久久蜜臀 | 麻豆av在线导航| 日韩黄色在线免费观看| 精品国产av 无码一区二区三区| 欧美日韩中文在线| 久久久久久久久久久久久女过产乱| 91麻豆成人久久精品二区三区| 国产精品探花在线播放| 丝袜a∨在线一区二区三区不卡| 免费网站在线观看视频| 欧美激情国产在线| 日韩高清三级| 亚洲欧洲av| 国产精品二区在线| 国内精品视频| 国产精品专区第二| 蜜臀国产一区| 欧美怡红院视频一区二区三区 | 亚洲综合激情另类小说区| 亚洲女人毛茸茸高潮| 久久综合色8888| 国产日韩视频一区| 综合日韩av| 男女男精品视频网| 丰满少妇大力进入| 一区二区三区午夜视频| 亚洲一区二区三区涩| 国产成人黄色| 欧美最大成人综合网| 校花撩起jk露出白色内裤国产精品| 成人高清在线观看| 精品中文视频| 成人精品视频99在线观看免费| www.久久.com| 国产精品亚洲网站| 91福利精品在线观看| 国产精品久久久久99| 日本美女一区| 国产精品h在线观看| 自拍偷自拍亚洲精品被多人伦好爽 | 91九色对白| 国产高清亚洲| 亚洲综合在线做性| 日韩免费一级| 91原创国产| 911亚洲精品| 国产精品99久久久久久久| 66精品视频在线观看| 国产伦精品一区二区三区四区免费 | 女同一区二区免费aⅴ| 欧美高清电影在线看| 日本在线视频www鲁啊鲁| 欧美激情亚洲视频| 不卡的av影片| 欧美一级淫片aaaaaaa视频| 久久野战av| 国产日韩在线亚洲字幕中文| 91麻豆精品国产91久久久更新资源速度超快| 成人a在线视频| 精品视频在线观看网站| 风间由美久久久| 日本一道高清一区二区三区| 日韩欧美一区二区三区久久婷婷| 欧美一站二站| 9l视频自拍9l视频自拍| 影音先锋久久久| 欧美日韩国产精品激情在线播放| 蜜桃伊人久久| 羞羞的视频在线| 国产91精品精华液一区二区三区| 人妻av一区二区| 久久九九99视频| 男人av资源站| 亚洲国产一区视频| 亚洲图片在线视频| 7777精品伊人久久久大香线蕉超级流畅 | 日韩中文字幕区一区有砖一区| 亚洲77777| 国产v综合v亚洲欧| 欧美熟妇激情一区二区三区| 日韩理论在线观看| 日本一二三区视频| 在线日韩一区二区| 亚洲a视频在线观看| 亚洲视频在线观看视频| 亚洲精品白浆| 国产成人综合一区二区三区| 精品一区91| 欧美大香线蕉线伊人久久| 性欧美69xoxoxoxo| 六月丁香婷婷在线| 国产精品一级二级三级| 成都免费高清电影| 伊人色综合久久天天人手人婷| 久久精品久久久久久久| 日韩一级欧美一级| 成人综合影院| 57pao国产成人免费| 免费一级欧美片在线观看网站| 欧美日韩在线一区二区三区| 这里只有精品在线| 91人人澡人人爽人人精品| 成人av手机在线观看| 美国精品一区二区| 欧美日韩国产综合新一区| 国产免费无遮挡| 一区二区av在线| 波多野一区二区| 91久久久久久久久久久| 视频一区中文| 久久精品国产sm调教网站演员 | 中文字幕人妻一区二区三区| 国产精品久久久一本精品 | 精品嫩草影院久久| 免费在线观看av| 国产精品久久久久久久久久东京| 国语一区二区三区| 青青草免费在线视频观看| 奇米精品一区二区三区四区| aaaaaav| 亚洲成a人片综合在线| 国产特黄一级片| 日韩在线免费观看视频| 在线成人视屏 | 免费成人av电影| 97avcom| 欧美美女啪啪| 真人抽搐一进一出视频| 国产精品99久久久久久似苏梦涵 | 久久综合av| 国产又大又黄又粗的视频| 久久久精品日韩欧美| 亚洲第一在线播放| 亚洲精品美女久久| 国产一二在线播放| 蜜桃久久精品乱码一区二区 | 91日韩视频| 无限资源日本好片| 国产精品色一区二区三区| 中文天堂在线播放| 最近2019年好看中文字幕视频 | 国产成人免费观看网站| 色婷婷综合五月| 国产香蕉在线| 国产99久久久欧美黑人| 最新国产精品视频| 欧美极品欧美精品欧美图片| 久久久久久亚洲综合| 小泽玛利亚一区二区三区视频| 一区二区三区视频在线| 成人国产一区二区三区精品麻豆| 亚洲欧洲精品一区二区| 精品亚洲成a人| 欧美成人免费观看视频| 亚洲第一区中文99精品| 成人勉费视频| 手机成人在线| 激情偷乱视频一区二区三区| 日本a级片视频| 亚洲成人国产精品| 亚洲优女在线| 亚洲欧洲一区二区在线观看| 国产一区三区三区| 国产精品theporn动漫| 亚洲欧美福利视频| 日韩成人在线一区| 成年人深夜视频| 91麻豆成人久久精品二区三区| 超碰在线97观看| 欧美精品免费在线观看| 久久影院资源站| 国产精品igao| 一区二区三区四区不卡在线 | 日韩久久一级片| 国产精品乱码人人做人人爱| 国产黄色片网站| 欧美一区二区三区……| 天天射成人网| 北岛玲一区二区| 欧美日韩精品一区二区三区四区| 欧美男男video| 欧洲高清一区二区| 国产高清成人在线| www.久久久久久久| 久久高清视频免费| 最新国产精品视频| 人妻巨大乳一二三区| 欧美日韩在线视频观看| 黄色免费网站在线观看| 久久精品人人做人人爽电影| 久久黄色级2电影| 伊人久久综合视频| 久久成人一区二区| 国产精品片aa在线观看| 国产高潮失禁喷水爽到抽搐| 欧美视频三区在线播放| 久久av色综合| 最新国产精品久久|