2011-01-07 13 views
8

Ruby on Railsの新機能は、モデルのデータベーススキーマを編集する方法があるのか​​と思っていました。Railsモデルをコマンドラインから編集する

例えば、私は自分のアプリケーション内の加入者のモデルを持っている - 私が作成した方法は、それはrails generate scaffold Subscriber email:string

を使用していた。しかし、今、私は同様に、加入者モデルに名前をしたいです。これを行う簡単な方法はありますか?私は現在のコントローラとビューに多くのコードを入れているので、必ずしも足場を破壊したくはありませんが、モデルを編集したいと思います。事前に

おかげで、

hwrd

P.S. Ruby on Rails 3を使用しています

+1

のhttpを読む://guides.rubyonrails .org/active_record_migrations.htmlは非常に役立つはずです。 – Hong

答えて

12

ActiveRecordモデルは、それを表すテーブルを検査します。新しいフィールドを追加するだけでモデルを変更する必要はありません(検証などを追加しない限り)。そして、あなたは、コントローラとビューに名前フィールドを参照し始めることができます

rails g migration AddNameToSubscribers name:string 
rake db:migrate 

:あなたが何をしたいか

は、新たな移行を行い、その後、最大のデータベースを移行しています。

(このジェネレータコマンドは少し魔法のように見えるかもしれないが、レール・ジェネレータは、このフォーマットを認識し、適切なadd_columnremove_columnコードを生成しますさらなる読書のためRails migration guideを参照してください。。)

+1

しかし、DBの古い列はまだ領域を占有していませんか?私はこのように見ていない。それは良い点です。 – hwrdprkns

+0

@hwrdprkns:はい、まだスペースを取っています。あなたが何を求めているのか分かりません。このコマンドはあなたの 'subscribers'テーブルに' name'フィールドを追加します。それはあなたが望むものではありませんか? –

+1

古い列は削除されていないため、引き続き領域を占有します。上の移行は、subscribersテーブルに列を追加することだけです。 – Zabba

2

モデルのデータベーススキーマを変更する場合は、マイグレーションを使用することをお勧めします。あなただけのモデルを見つけて、各インスタンス内のデータを更新するわけない場合

あなたは

add_column :city, :string 
remove_column :boo 

http://guides.rubyonrails.org/migrations.html

のようなものをやる、@のapneadivingの答えを持って行きます。

+0

ご返信ありがとうございます。私はデータベーススキーマを変更することを意味します - 申し訳ありませんが、私はそれを明確にしませんでした。このコマンドの後、私のスキーマは良いものに更新されますか?また、ちょっとしたメモとして - remove_columnは、そのモデルの列の任意の/すべてのデータもbashしますか? – hwrdprkns

+0

@hwrdprkns、列がテーブルから削除されると、そのデータはすべて失われます。そして@Jesse Wolgamottが言っていることは、@Josh Lindseyが言ったことと本質的に同じです。 – Zabba

+0

申し訳ありませんが、私はこれを投票しました、私は意味しませんでした!あなたがあなたの答えを編集したら、私はそれをバックアップするでしょう! – hwrdprkns

関連する問題