2011-06-16 126 views
32

在rails中,我生成一個包含兩個字符串的模型,並且想添加更多。我會如何去做這件事?如何向模型添加屬性?

+0

這些都是公共屬性? – natedavisolds 2011-06-16 14:08:36

+0

你需要遷移http://guides.rubyonrails.org/migrations.html#creating-a-migration – dexter 2011-06-16 14:09:13

+0

所以,只需將字符串添加到遷移,然後耙db:migrate? – jsttn 2011-06-16 14:16:21

回答

34

活動記錄將您的表格列映射到模型中的屬性,因此您不需要告訴導軌您需要更多,您需要做的就是創建更多列並且導軌將檢測它們,屬性將會自動添加。

您可以通過migrations你的表添加更多的列:

rails generate migration AddNewColumnToMyTable column_name:column_type(string by default) 

例子:

rails generate migration AddDataToPosts views:integer clicks:integer last_reviewed_at:datetime 

這將生成一個文件:

db/2017.....rb 

打開它,並添加修改如果需要:

self.up 
    #add_column :tablename, :column_name, :column_type 
    add_column :posts, views, :integer 
    add_column :posts, clicks, :integer, default: 0 
end 

希望這有助於。

+0

假設我創建了一個Rails應用程序並且有一個名爲User_credential的模型。這目前有:姓名和電話號碼。部署之後,老闆突然意識到他想給模型添加地址。而且他要求我創建一個爲模型添加屬性的表單。這是可能的軌道? – BKSpurgeon 2016-06-20 23:37:43

+0

@BKSpurgeon一種選擇是使用序列化字段並將自定義屬性存儲在其中。另外請看一下http://api.rubyonrails.org/classes/ActiveRecord/Store.html,它可以讓你像普通的一樣處理自定義屬性。 – JCorcuera 2016-06-21 04:29:40

44

是的,@JCorcuera的解決方案是適用的,但我建議向Rails應用更多的信息以滿足我們的要求。試試這個辦法:

rails generate migration add_columnname_to_tablename columnname:datatype 

例如:

rails generate migration add_password_to_users password:string 
+0

這絕對是一個更好的方法,只要確保你的名字完全適合它的工作。 – HussienK 2015-11-26 22:39:35

+0

「你得到的名字完全適合它的工作」:我想補充一點,add_columnname_to_tablename有一個含義,並且需要合理。這看起來很明顯,但我沒有馬上想到,它來自另一個遷移工具,遷移名稱永遠不相關。 – Sarumanatee 2016-11-22 21:13:56

2

如果您使用Rails的4.x版,您現在可以生成引用遷移,就像這樣:

軌道產生遷移AddUserRefToProducts用戶:引用

像你可以看到rails guides

2

只是爲了讓它更簡單,你可以這樣做:

rails g migration add_something_to_model something:string something_else:integer