在Rails中生成腳手架和生成模型有什麼區別?做什麼的優點/缺點?Rails中腳手架和模型的區別
回答
當你生成一個模型時,你會得到一個模型以及一些相關的組件。我最喜歡的解釋是這樣的話題的方法是實際嘗試,或鼓勵他人嘗試一下,所以如果我是一個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
生成的所有文件,因此您不必擔心通過試驗不可避免地搞亂了項目。
生成的支架包括:生成一個模型,但也產生
- 的RESTful路由
- 與用於模型的RESTful的處理
- 視圖由控制器所需
- 測試存根 所有操作的控制器
腳手架是新Rails用戶的良好開端。
新用戶很可能會被腳手架混淆,因爲他們不瞭解所有組件如何協同工作。腳手架可能最適合有經驗的用戶,他們想要通常會重複的工作快捷方式。
隨着
$rails generate scaffold <name>
可以自動生成準備使用的控制器,模型和視圖一個完整的CRUD(創建,讀取,更新,刪除)Web界面。它比生成模型更方便快捷,但它生成的代碼不太可能適合您的應用程序。
A scaffold非常適合用於簡單示例,快速模型或測試。
如果您改變了主意,決定已經產生的模型後,用支架,可以隨時運行
$rails generate scaffold <name>
它將創建所有丟失的文件。或者如果你是使用腳手架OT快樂,你總是可以通過以下方式將其刪除:
生成支架:
$rails generate scaffold Story
如果遷移你的文件,執行回滾:
$rake db:rollback
銷燬或撤消支架:$鐵軌破壞支架故事
- 1. 默認腳手架和漂亮腳手架有什麼區別?
- 2. Rails的腳手架類型
- 3. 如何更改Rails腳手架中的默認模型模板?
- 4. rails g腳手架現有模型和數據庫表
- 5. Ruby on Rails:腳手架,模型和屬性
- 6. Ruby on Rails腳手架社區資源
- 7. 腳手架在Rails 2.2中?
- 8. Rails架構腳手架
- 9. Rails:2個腳手架模型的嵌套形式?
- 10. 基於現有模型的Rails腳手架不起作用
- 11. 覆蓋haml-rails腳手架模板
- 12. 的Rails:腳手架命令
- 13. 雄辯模型和模型的區別?
- 14. Rails - 測試模型和應用模型有什麼區別?
- 15. 如何刪除RoR中的模型和腳手架?
- 16. 「發電機」和「腳手架」有什麼區別?
- 17. Ruby on Rails attr_accessible和腳手架
- 18. 爲現有模型生成腳手架
- 19. NET C#模型Knockout.js腳手架
- 20. 在rails 4.0中sass-rails助手「image_url」和「asset_url」之間的區別?
- 21. php和框架中的庫和助手之間的區別
- 22. Rails 2.2.2中的動態腳手架
- 23. Grails中渲染和模型的區別
- 24. 如何使用Devise和腳手架生成模型來安裝Rails關聯?
- 25. 在ASP.NET MVC 3和實體框架中使用繼承的腳手架模型
- 26. 我需要cr8 RnR應用程序的腳手架和模型?
- 27. 腳手架腳手架
- 28. 腳手架和數組類型列
- 29. 腳手架和手動更新Ruby on Rails的屬性howto?
- 30. 動態數據綁定與腳手架的區別
我也應該encour讓你閱讀任何有關這些主題的官方Rails指南......我提供了有關Active Record和Migrations等內容的相當高級的概述,但希望有足夠的回答你的問題! – aceofbassgreg
了不起的答案非常感謝你,你幫了我很多 – SsouLlesS
我有同樣的問題。很好的解釋。謝謝。 – whitehat