2012-04-27 68 views
19

我已經創建使用添加一個新的領域到Rails模型

rails generate scaffold myOdb2 columna:integer, columnB:string 

現在我想添加一個columnc:string scafold。我該怎麼辦?

順便說一句:問題是一般的,但可以通過Rubymine更快地完成嗎?

回答

29
  • 如果您剛剛產生,並意識到自己的錯誤,你可以使用:

    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

  • 如果您對控制器或視圖進行了更改,那麼您將需要運行遷移來更新數據庫和模型,然後手動將新列添加到每個視圖。

58

必須生成一個遷移:

rails g migration add_columnc_to_myodb2s columnc:string 

它應該包含添加一列到表中的一行。

add_column :myodb2s, :columnc, :string 

這會將列添加到yourdb表中,當然還有您的模型,但不會添加到任何視圖中。您需要手動添加它。據我所知。

+0

謝謝。這是否將列添加到數據庫,模型和HTML? – Jeb 2012-04-27 14:57:54

+1

不,它只在運行'rake db:migrate'時將列添加到數據庫和模型中。創建腳手架後,無法自動擴展腳手架。我所知道的。這將是一項複雜的任務,太複雜。 所以你需要手動添加。 – Matzi 2012-04-27 14:59:03

+0

這應該是最好的答案!因爲如果已經有東西的話,你不想摧毀並重新開始。 – TonyGW 2015-07-23 16:59:42

1

腳手架,方便快捷,生成所有在一次數據模型和Web界面。然而,軌道generate scaffold只是開始使用模型的一種方式,它只是在一開始就有所幫助。

通常情況下,您首先必須擴展數據模型。通過使用rails generate migrationrake db:migration簡化了此任務。請注意,您可能更喜歡使用bundle exec的rake來確保在您的Gemfile中使用rake版本。然後,根據您的Web應用程序的要求,您可能希望直接更新(也可能是新建)控制器和視圖。

又名MVC

例如,在全新的架式模型,你可能需要更新索引並顯示意見(見app/views文件夾)和myOdb2控制器(見app/controllers文件夾)

不要忘了閱讀migratons http://guides.rubyonrails.org/migrations.html

3

沒有人提到更新強大的參數:

所以,讓我們說我有一個現有的腳手架叫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 
相關問題