1

値の初期化を処理するときにActiveRecordモデルを適切に初期化するさまざまな方法について、ここで多くの質問を読みました。これは常にデフォルト値の提供に関連しています。私が出くわした素晴らしい答えは、さまざまな方法を明確にするのに役立ちました。

ただし、ActiveRecordベースの初期化メソッドをオーバーライドすることに嫌気がさしている場合、標準のRubyクラスinitialize(arg1, arg2...)メソッドのように値で初期化するときにActiveRecordモデルにパラメーターを提供する適切な方法は何ですか。

だからあなたはできる

obj = MyObject.new(Obj1, some_num)

私が遭遇した唯一のことは、実際にはメソッドをオーバーライドすることでしたが、初期化で最初にinitialize呼び出しました。ただし、ActiveRecordの基本クラスは多くの場合ARオブジェクトをインスタンス化するためにsuper使用するため、これは眉をひそめ、初期化メソッド全体を回避する可能性があります。allocate

それで、RoRの標準的な方法として初期値を提供することが見つからないもう1つの根本的な理由があるのでしょうか?

オブジェクトでvalidatesを使用して、適切な属性をすべて設定するなどの要件を満たさずにオブジェクトを保存できないことを検証できることはわかっています。しかし、私はこの特定のオブジェクトに近づいていたので、初期化して開始するときに必要な属性がないと作成されませんでした(初期化時にすべての情報があり、DBから取得する場合は、これらすべての値があります)。

誰かが私を導くのを手伝ってもらえますか?

追加の質問 上記を行うための受け入れられた方法がある場合、値を使用してオブジェクトを初期化するとき、つまりオブジェクトがDBから取得されないように初期化されるときに考慮する必要がある別の領域があるようです。初期化値を適切に処理しないと、DBから取得されたものが上書きされる可能性があります(または、属性をデフォルト値に設定することに関連して読んだことがあります)。それで、それを適切に処理する必要がある場合、どのようにそれを行うのでしょうか?

4

1 に答える 1

-1

ActiveRecord オブジェクトを初期化するときに、値のハッシュを提供できます。これはcreateコントローラーのアクションで使用され、アクションで収集されたデータに基づいて新しいオブジェクトを作成しますnew

例えば:

def create
  @book = Book.new(params[:book])

ここparamsで、新しいオブジェクトの値のハッシュです。

于 2013-03-22T12:04:46.617 に答える