2013-03-02 154 views
0

據我所知,您可以在db/migrations中指定模型字段數據類型。在Django中,這對我來說是新的,您可以直接在Model類中指定模型字段數據類型。我是否正確思考這個問題?這是在軌道上的常見做法還是我只是使用工作?Rails遷移表

另外,你如何在這個db/migrations文件中指定表關係。舉例來說,如果我有一個被稱爲A級模型

我有一個稱爲B類另一種模式,我想一個一對多的關係與A類。難道我只是做

class ClassA < ActiveRecord::Migration 
    def change 
    create_table :projects do |t| 
     t.classB :name 
    end 
    end 
end 

我如何驗證我的遷移文件和我的模型文件沒有任何語法錯誤。據我所知,我只是運行rake db:migrate,但是如果我不希望我的遷移文件被替換,因爲我在文件中指定了字段數據類型?

+0

是否有任何答案可以解決您的問題?如果不是,請張貼您遇到的更多問題。如果他們這樣做,請勾選最好的答案作爲接受的答案。 – weltschmerz 2013-03-05 12:35:34

回答

1

當您創建新模型時,rails會創建shema遷移文件和模型。 在遷移文件中指定您的列。可以在這裏添加一些代碼,但你應該儘可能少。上下添加/刪除列,添加數據庫索引等。

在模型中定義你的關係belongs_tohas_many等,你scopes爲表和OFC爲模型的方法。您的模型會繼承您的表格列,以便您可以直接訪問它們。

我不知道Django,這是在rails中的常見做法。

關係及其他相關信息好,你可以點擊這裏:http://www.tutorialspoint.com/ruby-on-rails/rails-models.htm

+1

我認爲導軌指南很好解釋。 http://guides.rubyonrails.org – 2013-03-02 18:55:11

+0

那麼是否有任何方式來指定我的數據類型,如:在Model類中的布爾值,還是我總是在模式遷移文件中執行此操作? – user1431282 2013-03-02 18:55:53

+0

您可以在遷移文件中定義列數據類型。 – YvesR 2013-03-02 18:58:28

3

好了,一切的一切,你似乎有三個問題:

1:據我所知,您指定型號場數據庫/遷移中的數據類型。 [...]我是否正確思考這個問題?這是在軌道上的常見做法還是我只是使用工作?

是的,你對此是正確的。字段數據類型不會顯示在模型內部,只在您的遷移中顯示。順便說一下:我很少發現自己手動編寫遷移文件。如果您使用rails命令,它將自動生成遷移文件。例如,如果您使用

rails g model User first_name:string last_name:string

這將創建一個名爲User模型,這將創建一個用戶表中的字段idfirst_namelast_name和時間戳字段遷移。如果你想稍後添加或刪除列,那麼有一個很好的技巧,只要運行

rails g migration add_fields_to_users field_name:field_type

rails g migration remove_fields_from_users field_name

如果您認爲合適,請替換field_name,field_typeusers。該命令將爲您創建一個遷移來添加或刪除字段,因此您不必手動編寫這些字段。

2 .:另外,如何在db/migrations文件中指定表關係。

你不知道。 Rails通過像has_many,belongs_to,has_and_belongs_to等關聯方法來處理這個問題。看看this rails guide to active record associations。您需要在數據庫端執行的一件事是爲一對多關係添加foreign_id列或爲多對多關係創建連接表。例如,如果您有用戶表和圖片表,並且每張圖片都屬於用戶,則在用戶模型中,您將編寫has_many :pictures,在您的圖片模型中,您將編寫belongs_to :user,並且在圖片表中您需要一個名爲user_id與一個整數類型。

3 .:如何驗證我的遷移文件和我的模型文件沒有任何語法錯誤。

你也沒有。你只需運行rake db:migrate,如果失敗了,它會告訴你在哪裏以及爲什麼。如果你的模型有語法錯誤,它會告訴你什麼時候啓動你的服務器,或者當你運行你的測試,或者至少當你在某處使用它時(例如,當你調用模型的方法時)。如果你的意思是你如何驗證模型的數據,這是一個完整的其他問題 - 參考this guide to active record validations and callbacks,它詳細解釋了檢查存在性,唯一性,長度等的驗證。

+0

好的解釋,即使我會爭辯說,在第2點中,以某種方式在遷移中「指定」關聯(爲has_many關聯中的外鍵創建列)或爲多對多關聯創建連接表。 – Nobita 2013-03-02 19:01:07

+0

@Nobita好點,謝謝!我補充說。 – weltschmerz 2013-03-02 19:05:17

+0

+1 :)從我的觀點來看,真的很好。 – Nobita 2013-03-02 20:26:13

2

你問幾個問題,讓我們去逐一:

據我所知,您在 DB /遷移指定模型字段的數據類型。這對我來說是新的,因爲在Django中,您可以直接在Model類中指定您的模型字段數據類型 。我在糾正 在想這個嗎?這是在軌道上的常見做法還是我只是使用工作?

遷移用於更改數據庫。遷移的例子:

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 
     t.string :name 
     t.text :description 
    end 
    end 
end 

運行此,你會創建表的產品使用字符串字段名爲名。所以,是的,您可以在遷移中指定您的模型字段數據類型。

而且,你怎麼在這個數據庫中指定表的關係/遷移 文件。例如,如果我有一個叫做A級的模型。

您需要在模型中指定您的關係(或關聯)。閱讀this,因爲它很好地解釋。但考慮到在遷移過程中,您必須做某些工作來創建關聯,因爲您可能需要爲多對多關聯創建連接表,或者創建一個引用has_many關聯的另一個表的列。

如何驗證我的遷移文件和我的模型文件沒有 任何語法錯誤。據我所知,我只是運行rake db:migrate,但是 如果我不希望我的遷移文件被替換,我在該文件中指定了 字段數據類型,該怎麼辦?

我不確定你在這個問題上的含義。