0

build_foo 呼び出しの 2 番目の引数は決してFoo#initialize(つまりargs[1]is nil) になりません。初期化する唯一の引数をFoo#initialize保持しながら、2 つ以上の引数を渡すための提案はありますか?*args

class Foo < ActiveRecord::Base
    belongs_to :bar
    def initialize *args
        super()
        self.total = args[0] + args[1]
    end
end

class Bar < ActiveRecord::Base
    has_one :foo
    def do_something
        build_foo 2, 3   # 3 never reaches Foo#initialize
        build_foo [2,3]  # args[0] == [2,3], which is not what's desired
        save!
    end
end
4

1 に答える 1

3

あなたの質問に答えるには - できません。build_foo にはdocumentationで定義されたパラメーターが 1 つしかないため、これはarguments = {}です。新しいレコードを初期化するには、引数 hash のみを渡す必要があります。

AR::Base 自体は定義されていないため、#superinを呼び出す必要もありません。#initialize#initialize

引数ハッシュの代わりに 2 つの異なる引数を渡す必要があるのはなぜですか? 位置引数は、設定した値を教えてくれません。AR オブジェクトでは、テーブルに複数の属性がある可能性があります。

于 2011-06-14T06:43:12.297 に答える