我已經創建使用添加一個新的領域到Rails模型
rails generate scaffold myOdb2 columna:integer, columnB:string
現在我想添加一個columnc:string
scafold。我該怎麼辦?
順便說一句:問題是一般的,但可以通過Rubymine更快地完成嗎?
我已經創建使用添加一個新的領域到Rails模型
rails generate scaffold myOdb2 columna:integer, columnB:string
現在我想添加一個columnc:string
scafold。我該怎麼辦?
順便說一句:問題是一般的,但可以通過Rubymine更快地完成嗎?
如果您剛剛產生,並意識到自己的錯誤,你可以使用:
rails destroy scaffold myOdb2
,然後重新生成腳手架:
rails generate scaffold myOdb2 columna:integer, columnB:string, columnc:string
如果您已對支架創建的模型進行了一些更改,但您不介意破壞該模型控制器和視圖:
rails destroy scaffold_controller myOdb2
然後創建遷移添加的列中:
rails generate migration add_columnc_to_myodb2s columnc:string
然後重新生成所述控制器和視圖:
rails generate scaffold_controller myOdb2 columna:integer, columnB:string, columnc:string
如果您對控制器或視圖進行了更改,那麼您將需要運行遷移來更新數據庫和模型,然後手動將新列添加到每個視圖。
必須生成一個遷移:
rails g migration add_columnc_to_myodb2s columnc:string
它應該包含添加一列到表中的一行。
add_column :myodb2s, :columnc, :string
這會將列添加到yourdb表中,當然還有您的模型,但不會添加到任何視圖中。您需要手動添加它。據我所知。
腳手架,方便快捷,生成所有在一次數據模型和Web界面。然而,軌道generate scaffold
只是開始使用模型的一種方式,它只是在一開始就有所幫助。
通常情況下,您首先必須擴展數據模型。通過使用rails generate migration
和rake db:migration
簡化了此任務。請注意,您可能更喜歡使用bundle exec
的rake來確保在您的Gemfile中使用rake版本。然後,根據您的Web應用程序的要求,您可能希望直接更新(也可能是新建)控制器和視圖。
又名MVC
例如,在全新的架式模型,你可能需要更新索引並顯示意見(見app/views
文件夾)和myOdb2控制器(見app/controllers
文件夾)
不要忘了閱讀migratons http://guides.rubyonrails.org/migrations.html
沒有人提到更新強大的參數:
所以,讓我們說我有一個現有的腳手架叫myapp
,我想添加更多的領域,該腳手架。三件事情要做。
的字段被添加有:
=>
1)rails g migration add_term_count_and_current_record_count_and_previous_record_count_to_myapp term_count:integer , current_record_count:integer , previous_record_count:integer
=>
2) Update views, example updating _form.html.rb
我需要添加:
<div class="field">
<%= f.label :current_record_count %><br>
<%= f.number_field :current_record_count%>
</div>
<div class="field">
<%= f.label :current_record_count %><br>
<%= f.number_field :previouse_record_count%>
</div>
<div class="field">
<%= f.label :term_count %><br>
<%= f.number_field :terminations_count %>
</div>
=>
3) Update Controller :
新版本的rails具有所謂的強參數,以防止黑客傳遞任意列字段值。長話短說,用新的字段名稱更新方法,否則你不會看到新的字段..他們不會傳遞到任何地方...不可信的值; o)
# Never trust parameters from the scary internet, only allow the white list through.
def vendor_file_params
params.require(:vendor_file).permit(:name, :run_date, :term_count ,
:current_record_count , :previous_record_count ,:comments)
end
end
謝謝。這是否將列添加到數據庫,模型和HTML? – Jeb 2012-04-27 14:57:54
不,它只在運行'rake db:migrate'時將列添加到數據庫和模型中。創建腳手架後,無法自動擴展腳手架。我所知道的。這將是一項複雜的任務,太複雜。 所以你需要手動添加。 – Matzi 2012-04-27 14:59:03
這應該是最好的答案!因爲如果已經有東西的話,你不想摧毀並重新開始。 – TonyGW 2015-07-23 16:59:42