2017-09-05 116 views
-1

我是Ruby on Rails的新手,我只是試圖向現有模型添加新屬性。我有一個新的布爾屬性添加到我的類繼承自:一步如何向Ruby中的模型(ActiveRecord)添加新屬性

ActiveRecord::Base 

會有人解釋,一步,怎麼辦呢?

+2

你問如何添加一個**列**到**數據庫**?閱讀[數據庫遷移](http://edgeguides.rubyonrails.org/active_record_migrations.html)。特別是,你可以使用'add_column'或'change_table(:table_name){...}' –

+0

標準模型屬性是根據表中的列名動態定義的。通過添加一個表格列,您可以訪問模型上的getter/setter方法。 –

回答

2

您需要使用遷移才能將字段添加到數據庫。創建這些文件的最簡單方法是與終端命令,但也可以手動創建:

http://edgeguides.rubyonrails.org/active_record_migrations.html

每次添加一個遷移,你需要將它應用到你的數據庫,這是與完成:

rake db:migrate 

當您運行此,軌道經過已應用了所有遷移文件的檢查,然後通過休息才能運行。這意味着您可以回滾已經搞砸的遷移,並且可以根據需要在遷移的不同「階段」查看數據庫。

對於您的情況,我們希望在模型「書籍」中添加一個「發佈」字段。我們將從終端運行:

rails g migration addPublishedToBook published:boolean 

您可以從上方看到結構。如果我們想要一個叫姓字符串添加到我們的模型的用戶:您從終端這些任務後

rails g migration addFirstnameToUser firstname:string 

,每一個都會創建一個新的遷移文件。準備就緒後,運行rake db:migrate,新的更改將應用​​於您的數據庫。

+0

哦,謝謝你! 當我運行耙db:遷移我的新領域「發佈」將可以從我的模型「書」?還是我必須做點別的? 再次感謝您 – Leonardo

+0

沒錯 - 在您從終端運行rails g遷移之後,請檢查您的目錄:app/db/migrate,您應該會看到您的遷移文件。當它在那裏時,運行rake db:從終端遷移,並將其應用到您的數據庫 – Mark

+0

謝謝,它的工作:D – Leonardo

2

您可以生成一個新的遷移指定它所對應的屬性和模型:

$ rails generate migration add_new_attribute_to_model new_attribute:type 

這會產生這樣一個遷移:

class AddNewAttributeToModel < ActiveRecord::Migration[RailsVersion] 
    def change 
    add_column :model, :new_attribute, :boolean # boolean type attribute 
    end 
end 

然後,你可以堅持的變化:

$ rails db:migrate 
1

只有您需要添加新的遷移文件才能對數據庫進行更改。

rails g migration AddFieldToMyTable my_field:string 

現在,你需要堅持的變化:

bundle exec rake db:migrate 

如果你想將字段添加到窗體,不要忘了添加在控制器接受屬性的新領域:

def model_params 
    params.require(:model).permit(...., :my_field) 
end 

簡單的解釋說是過程,希望它對你有幫助! (谷歌traductor愛:[)

相關問題