2013-07-18 46 views

回答

41

當你生成一個模型時,你會得到一個模型以及一些相關的組件。我最喜歡的解釋是這樣的話題的方法是實際嘗試,或鼓勵他人嘗試一下,所以如果我是一個Rails項目中輸入命令rails generate model Foo name:string description:text,我會得到:

invoke active_record 
    create db/migrate/20130719012107_create_foos.rb 
    create app/models/foo.rb 
    invoke test_unit 
    create  test/unit/foo_test.rb 
    create  test/fixtures/foos.yml 

第一行調用Active Record,它基本上將您的模型綁定到數據庫。下一行創建了所謂的遷移文件。遷移文件包含更改數據庫的說明。這第一個遷移文件創建了名爲'foos'的數據庫表,它也將創建「name」和「description」列。

下一行生成模型本身。該模型基本上是一個繼承自Active Record的Ruby類。這意味着現在可以在模型中調用任何可以在Active Record中調用的方法。最後三行基本上爲您的模型創建相關的測試文件。如果您使用的是RSpec,則會創建spec文件。

如果您的Rails應用程序僅包含模型,您將不會有任何一種在頁面上顯示信息的視圖,也不會有控制信息流的指令。您的選擇是生成控制器(這反過來會生成您的視圖)或生成一個腳手架,它會生成您的模型,視圖,控制器和寫入您的routes.rb文件。如果我跑rails generate scaffold foo我會得到:

invoke active_record 
    create db/migrate/20130719013307_create_foos.rb 
    create app/models/foo.rb 
    invoke test_unit 
    create  test/unit/foo_test.rb 
    create  test/fixtures/foos.yml 
    invoke resource_route 
    route resources :foos 
    invoke scaffold_controller 
    create app/controllers/foos_controller.rb 
    invoke erb 
    create  app/views/foos 
    create  app/views/foos/index.html.erb 
    create  app/views/foos/edit.html.erb 
    create  app/views/foos/show.html.erb 
    create  app/views/foos/new.html.erb 
    create  app/views/foos/_form.html.erb 
    invoke test_unit 
    create  test/functional/foos_controller_test.rb 
    invoke helper 
    create  app/helpers/foos_helper.rb 
    invoke  test_unit 
    create  test/unit/helpers/foos_helper_test.rb 
    invoke assets 
    invoke coffee 
    create  app/assets/javascripts/foos.js.coffee 
    invoke scss 
    create  app/assets/stylesheets/foos.css.scss 
    invoke scss 
identical app/assets/stylesheets/scaffolds.css.scss 

要回答你的問題,支架的優點是它的快速,方便,一切都預先配置爲您服務。然而,獨立於腳手架生成模型的優勢(然後依次在需要的地方生成控制器/視圖並自行編寫您的routes.rb文件)是,您對應用程序有更多的控制權,以及它的外觀和功能,避免不必要的代碼,您可以使用行爲驅動開發或測試驅動開發,也可能是其他人可能想要添加的其他內容。

我最後的建議是:Rails非常用戶友好,所以請嘗試自己嘗試。您可以使用相應的destroy命令撤消任何generate命令,因此例如rails destroy scaffold Foo會刪除rails generate Scaffold Foo name:string description:string生成的所有文件,因此您不必擔心通過試驗不可避免地搞亂了項目。

+0

我也應該encour讓你閱讀任何有關這些主題的官方Rails指南......我提供了有關Active Record和Migrations等內容的相當高級的概述,但希望有足夠的回答你的問題! – aceofbassgreg

+0

了不起的答案非常感謝你,你幫了我很多 – SsouLlesS

+0

我有同樣的問題。很好的解釋。謝謝。 – whitehat

4

生成的支架包括:生成一個模型,但也產生

  • 的RESTful路由
  • 與用於模型的RESTful的處理
  • 視圖由控制器所需
  • 測試存根
  • 所有操作的控制器

腳手架是新Rails用戶的良好開端。

0

新用戶很可能會被腳手架混淆,因爲他們不瞭解所有組件如何協同工作。腳手架可能最適合有經驗的用戶,他們想要通常會重複的工作快捷方式。

0

隨着

$rails generate scaffold <name> 

可以自動生成準備使用的控制器,模型和視圖一個完整的CRUD(創建,讀取,更新,刪除)Web界面。它比生成模型更方便快捷,但它生成的代碼不太可能適合您的應用程序。

A scaffold非常適合用於簡單示例,快速模型或測試。

如果您改變了主意,決定已經產生的模型後,用支架,可以隨時運行

$rails generate scaffold <name> 

它將創建所有丟失的文件。或者如果你是使用腳手架OT快樂,你總是可以通過以下方式將其刪除:

生成支架:

$rails generate scaffold Story 

如果遷移你的文件,執行回滾:

$rake db:rollback 

銷燬或撤消支架:$鐵軌破壞支架故事