Rails エンジンを使用していて、その動作をオーバーライドして追加したい場合、次の問題に直面しました。
Engine に Course という名前の ActiveRecord モデルがあるとします。
module MyEngine
class Course < ActiveRecord::Base
attr_accessible :name, :description, :price
end
end
そして、メインの Rails アプリで移行を作成して列を追加したいのですが、その新しい列を attr_accessible に追加する必要があります (一括割り当てできるようにするため)。
MyEngine::Course.class_eval do
attr_accessible :expiration_date
end
しかしその後、Rails は最初の 3 つの属性が Mass-Assignable ではないことを訴えるので、オーバーライドに新しい属性を単に「追加」する代わりに、オーバーライドされたクラスのすべての属性を次のように再宣言する必要があります。
MyEngine::Course.class_eval do
attr_accessible :name, :description, :price, :expiration_date
end
これらの属性を再宣言せず、新しい属性を追加するだけのより良い方法はありますか?