2

モデルに加えた変更を使用して移行を作成する方法はありますか? たとえば、Fooモデルbaroof属性が既に db に永続化されています。rabFooに属性を追加したい。この属性をクラスに追加し、この変更を認識する移行を生成する方法はありますか?

Foo モデル ファイルに を追加:rabするattr_accessibleと、この魔法の関数によって、次のような移行が自動的に作成されます。

class AutoMigrate < ActiveRecord::Migration
  def change
  add_column :foo, :rab, :string
end

ありがとう。

これは、私が見つけた別のスレッドで、 Rails - Generating migration script from modelに関する詳細情報があります。

DataMapper が私が探しているソリューションのように見えますが、ActiveRecord から移行するのをためらっています。

https://github.com/datamapper/dm-rails

4

3 に答える 3

3

いいえ、これは Rails が期待する動作とは少し逆です。

1 つの問題は、たとえば、永続化された暗号化されたパスワードを生成するために使用されるパスワード フィールドなど、永続化されるべきではないattr_accessibleプロパティがあることが多いことです。

于 2013-05-15T20:10:37.863 に答える
1

デイブが言ったように、あなたは間違った方向に進んでいます。

ActiveRecord は、データベース内の既存の列ごとにメソッドを作成します。たとえば、モデルに対応するテーブルに foobar 列がある場合、foobarメソッドとfoobar=(value)メソッドがあります。

新しいRailsアプリで新たに始める場合は、マイグレーションを介してスキーマを作成できますし、おそらく作成する必要があります.Railsに組み込まれているマイグレーションジェネレータをそのために使用し、必要に応じてマイグレーションファイルを微調整してrake db:migrate.

Rails の外部でデータベースに変更を加えている場合は、ほとんどの場合、ActiveRecord を介して既にアクセスできます。

そうすればrake db:schema:dump、データベースの列をすでに表示できるはずです。

スキーマ (既存の移行の一部ではない SQL を含む) のバックアップを確保したい場合は、 のconfig.active_record.schema_format = :sqlオプションの使用を検討してconfig/application.rbください。次に、 の代わりに、スキーマ作成 SQL がそのファイルにダンプされdb/schema.rbます。db/structure.sqlrake db:schema:dump

デイブの回答のコメントによると、属性を必須にしたいとも思っていました。これは、列を変更してnull不可にする移行を介して行うことができます。モデルに検証を追加して、それを要求することもできます。学習中で、それらを使用する必要がない場合は、 and を使用しないでattr_protectedくださいattr_accessible。Rails 4 では一括代入セキュリティがなくなり、それらが必要なものと関係があると考えて混乱しています (いずれにせよ、代わりに強力なパラメーターを使用します。上記の質問に対する私のコメントを参照してください)。必要なフィールドは、通常、最初に DB 制限 (null 可能かどうか、および場合によっては制約/トリガー) によって処理され、次にサーバー側で ActiveRecord 検証を介して検証され、次にクライアント側で HTML/Javascript で処理されます。

于 2013-05-15T20:19:59.933 に答える
0

そのような宝石や、それを実装する方法さえ知りません。慣例の逆です。また、主な問題は、 に何かを追加して属性タイプを知る方法attr_accessibleです。それが文字列なのか浮動小数点数なのかなどを知る方法はありません。慣習に従ってschema.rb fileください。

新しい移行を生成して、属性を Foo モデルに追加するだけです

rails generate migration add_rab_to_foo rab:string

次に、移行を実行します

rake db:migrate
于 2013-05-15T20:04:17.777 に答える