2012-08-26 53 views
0

我對rails中的模型和遷移有疑問。在RoR中使用migation綁定模型

舉個例子吧。我有一個會員型號:

class Member < ActiveRecord::Base 
    attr_accessible :a, :b 
end 

以及相應的遷移:

class CreateMembers < ActiveRecord::Migration 
    def change 
     create_table :members do |t| 
      t.string :a 
      t.string :b 
     end 
    end 
end 

我知道後來一個會員有車。所以,我要創建汽車模型等等 現在,我要修改這兩種模式將belong_tohas_one規則,但也創造了一個新的遷移和添加car.integer :member_id

我覺得很不切實際和冗餘。是否有任何讓自動執行此操作的技巧?此外,與Symfony2不同的是,模型完全與數據庫分離,因此我們需要通知foreign_key列。有什麼辦法可以寫car.member :member而不是car.integer :member_id?這是一個細節,但我會感激。

謝謝:)

回答

1

Rails提供一些聰明的發電機:

嘗試:

rails g model car member:references 

這將自動生成完整的遷移與member_id作爲外鍵(即使有一個索引)和belongs_to :member行也已添加到Car類。

rails g model car member:references產生這樣的:

class CreateCars < ActiveRecord::Migration 
    def change 
    create_table :cars do |t| 
    t.references :member 

    t.timestamps 
    end 
    add_index :cars, :member_id 
    end 
end 

這:

class Car < ActiveRecord::Base 
    belongs_to :member 
end 

那麼唯一剩下要做的就是將線has_one :carMember類。

更多關於發電機見:A Guide to The Rails Command Line

+0

好吧,但我怎麼能做到這一點,如果我已經產生了我的車模型,我要更新嗎? –

+0

在這種情況下,我也無能爲力。抱歉。但是在生成遷移時,您可以添加一些標誌來自動將列添加到您的遷移文件中,如下所示:'rails g migration add_member_id_to_cars member_id:integer',但您可能已經這樣做了=)。 – rathrio