シナリオ:すでにDocumentモデルがあり、追加したい
1回の移行で複数の列。
これまでに検索して読んだ内容から、移行ファイルを編集するだけです。移行がすでに適用されている場合は、ロールバックして再度移行します。
移行をロールバックして再編集するのは、その移行がローカルであり、どのリポジトリにもプッシュされていない場合にのみ安全です。他の人が適用した移行を編集すると、問題が発生する可能性があります。
既存のテーブルに列を追加する最も安全な方法は、新しい移行を作成することです。
Rails g migration add_public_and_private_to_document public:string private:string
add_[column_names]_to_[model]
命名規則を使用する場合、Railsは適切なテーブルを作成し、必要な移行を作成します。
詳細については、こちらをお読みください: http://guides.rubyonrails.org/migrations.html
@Camの方法は厳密です。移行の実行後に2つのことを更新する必要があることを除いて。
したがって、myapp
という既存のスキャフォールドがあり、そのスキャフォールドにさらにフィールドを追加したいとします。やるべき3つのこと。
追加するフィールドは次のとおりです。
=>
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の新しいバージョンには、ハッカーが任意の列フィールド値を渡さないようにするための強力なパラメーターと呼ばれるものがあります。簡単に言うと、メソッドを新しいフィールド名で更新してください。そうしないと、新しいフィールドが表示されません。 。
# 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
次のようなコマンドを発行できます。
Rails g移行ドキュメントpublic:string private:string