使用Rails 4的數據字段,我想我的整個數據模型在一個地方進行建模。 據我所知,通常通過遷移或使用rails generate scaffold
命令以及模型文件內類之間的關聯來生成每個類的字段。這感覺有點麻煩,我想知道是否沒有辦法在一個地方完成。我想知道是否可以在模型文件中進行字段定義。這將使您能夠在一個地方查看和編輯整個模型 - 非常有用,而且非常緊湊,可以引導具有更多關聯的新應用。導軌 - 定義模式本身
回答
這取決於你在說什麼,具體。要直接回答你的問題
不知該字段定義可以在模型文件
不幸被添加,不存在這樣的方法(至少沒有我知道的)之間進行同步您的ActiveRecord::Base
型號和數據庫。簡而言之,這種同步形式是通過rails遷移文件完成的。
使用rails g scaffold
命令的方便之處在於它爲您創建遷移文件,與控制器,模型和測試類一起的一次。然而,你絕對不需要通過腳手架來做任何這樣的事情;如果你願意,你可以一件件地做。如果在描述字段時出錯或需要修改某些內容,則只需編寫/生成一個新的遷移文件。 (A)手動更改數據庫(壞主意),或(B)寫入或生成遷移文件,或者(B)寫入或生成遷移文件根據需要更改數據庫(更好的主意)。
基本上,做你在想什麼,你通常會想要寫/產生遷移。如您所知,遷移實質上是以某種方式更改數據庫的腳本:添加或刪除列,重命名列,創建表格等等。
除了關聯之外,模型中沒有寫入字段信息。從數據庫加載記錄時,ActiveRecord(基本上)會使用適當的訪問器/增變器來構建對象。簡而言之,數據庫中爲該表/模型定義的任何列都是您的模型對象將包含的內容。
關於您關於生成腳手架時的繁瑣關係的說明,如果您指的是Rails將如何在指定模型中編寫關係的belongs_to
部分,那麼可能有點煩人,但是我相信原因僅僅是因爲關係的這一方是唯一可以準確假設的一方; Rails不知道你最終想要擁有什麼樣的關係。所以你確實需要去指出相關模型中關係的「另一端」(例如has_many
一側)。
希望我的散漫幫助。
編輯
在評論關於你的問題,我真的不能相信任何「捷徑」或此刻的工作流程的建議。說實話,我認爲在這種情況下最好的工作流程是在你寫任何東西之前儘量確保你的模型儘可能「正確」。
認爲它是這樣的:在一個框架,可以同步與DB模式,你基本上是在做同樣的事情,反正遷移,因爲他們將不得不執行相同類型的數據庫命令(alter table
和這樣)。唯一的區別是(A)Rails遷移是作爲每個變更的記錄,(B)明確指出遷移的細節。更不用說,您可以自由地在遷移中做更多的事情,或者添加一些決策邏輯等。
一般來說,雖然它看起來非常龐大而且很麻煩,但有很多遷移isn這不是一件壞事,必然。事實上,我甚至會說它的預期(特別是對於壽命較長的系統)。正如我所說,它顯示了沿途發生的事件的記錄,這意味着系統如何演變和變化。此外,當您需要部署應該由其他開發人員選擇和/或在生產中執行的更改時,它們非常有用。
請注意,如果您是第一次在生產環境中進行部署,通常需要執行'rake db:schema:load'來一次加載整個模式(無數據,只有表格結構體)。這往往比運行每個遷移要快得多。不過,這僅僅是的首次安裝。
另一點需要說明的是,上述段落也是爲什麼您不希望在遷移文件中放入任何種子信息(意思是不要創建記錄)的原因。這就是你的seed.rb文件的用途。
所以最後,我認爲你可以從中避免的主要原因是遷移與你的版本控制系統(GIT,SVN等)的提交歷史非常相似。我不瞭解你,但是我的提交歷史確實有很多「修復bug A」和「糾正以前提交的bug修復」等,雖然它很奇怪,但這在技術上是完全可以接受的,也許在大多數人的預期中案例。
通常你會在你的模型中定義的關聯,並通過遷移管理模型的數據庫字段。搭建腳手架不是建立模型之間關係的正確解決方案。腳手架將建立模型,視圖和控制器,所以它有時可能會過度殺傷。更不用說,當您使用腳手架時,您可以爲您生成的每個腳手架獲得完整的CRUD。它通常增加超過你的需要。
謝謝,你是對的,我現在淡化腳手架的一部分來編輯問題,並且仍然希望將整個模型 - 領域和關聯 - 放在一個地方,而不是分割成領域和關聯。如果可能的話。所以這個問題仍然是開放的,抱歉和感謝。 – matanster
明白了。回覆晚了非常抱歉。蒂格的回答是一個很好的答案。 –
- 1. 引導模式中的導軌形式
- 2. 引導模式:未定義
- 3. 在導軌中定義自定義模型名稱
- 4. 導軌和工廠模式
- 5. 導軌 - 從自定義列
- 6. 定義導軌連接
- 7. 自定義time_zone_select導軌4.0
- 8. 導軌,自定義例外
- 9. 定義模板類本身的類型
- 10. 銷燬用戶 - 使用自定義身份驗證(導軌)
- 11. 腳本/導軌與導軌
- 12. Haskell模塊導入本身
- 13. 模塊導入本身
- 14. PHPBB身份驗證+導軌
- 15. 自定義CSS休息引導模式
- 16. 導軌模型拆分爲多個定義
- 17. 帶導軌的用戶可自定義模板引擎
- 18. 如何爲我的導軌模型創建自定義方法
- 19. 導軌5取消定義模板錯誤
- 20. 測試自定義導軌模型方法
- 21. 未定義的方法`模型名稱 '在導軌3
- 22. 如何在多代模塊中定義/附加導軌驗證
- 23. 自定義查詢字段被導軌3丟棄模型
- 24. 從模式刪除表 - 導軌
- 25. 導軌 - 生成一個新的模式
- 26. 導軌 - 雙向的「友誼」模式(續)
- 27. 模型功能的導軌形式
- 28. 嵌套模型的導軌形式
- 29. Zurb基金會模式與AJAX(導軌)
- 30. 動態形式和模型導軌
是的,有幫助。只是在所有由腳手架創建的模型文件中添加所有關聯的麻煩,而不是在一個源文件中至少能夠編輯和檢查。更不用說提出測試來確認這些關聯確實實施了正確的關係並正確傳播了刪除操作。 – matanster
@matt你是來自Java EE/Spring還是hibernate框架?如果是這樣,我明白你指的是什麼。我只能告訴你,這只是Rails的方式。這樣想:在一個有幾十個模型的系統中,單個文件會變得非常龐大。更何況,你會看到這些關係沒有任何額外的上下文。最後,Rails的哲學是一個微小的,獨立的組件。只有那個階級與這個階級有關,並且沒有其他地方(一般來說)。 –
謝謝@Teeg,這似乎是釘住它。我只是不完全確定如何使用遷移工作在模型上的工作流程。如果我需要來回遷移,直到我釘住了我的數據模型,它確實感覺有點麻煩。任何推薦的快捷方式? – matanster