私は、同じオブジェクトの3つの子インスタンスを構成しているデータオブジェクトを持っています。そのオブジェクトから値を計算し、それをデータベースに保存する必要があります。 (後で別のアプリケーションによってデータベースから引き出されます。)派生したActiveRecord値を計算して保存する方法
私は下のクラス構造を模倣しましたが、基本的には、子値data_oneとdata_twoをまとめて3番目の変数に格納するメソッドが必要です、合計。私が推測するのは、db Parentテーブルのtotal_first、total_second、total_thirdです。合計をChild属性として宣言し、コールバックを使用して設定する必要がありますか?どんな助けでも大歓迎です - ありがとう!そして、これは本当に明白な疑問であれば謝罪...
class Child
attr_reader :data_one, :data_two
def initialize(data_one, data_two)
@data_one, @data_two,
end
def ==(other_child)
data_one == other_child.data_one &&
data_two == other_child.data_two
end
def Sdq.from_params(hash)
Sdq.new(
get_value(hash, :data_one),
get_value(hash, :data_two),
)
end
protected
def Sdq.get_value(hash, key)
hash.has_key?(key) ? hash[key] : hash[key.to_s]
end
end
class Parent < ActiveRecord::Base
composed_of :first_child, :class_name => "Child", :mapping => [
["data_one_first","data_one"],
["data_two_first","data_two"]
]
composed_of :second_child, :class_name => "Child", :mapping => [
["data_one_second","data_one"],
["data_two_second","data_two"]
]
composed_of :third_child, :class_name => "Child", :mapping => [
["data_one_third","data_one"],
["data_two_third","data_two"]
]
end
ありがとう、モデルを充実させるように関係が設定されています - フィールドは親テーブルに格納されていますが、子オブジェクトを使用して追加メソッドを呼び出すことができます。それはかなり面倒なようですが、私はそれを行うための別の方法があるかどうか分からないのですか?あなたの例では、私は子オブジェクトの値を設定する必要がありますか? Parentテーブルを自動的に更新しますか?どうもありがとう! – laura
@lainie Parentのインスタンスでsaveを呼び出すと、親テーブルが更新されます。あなたのマッピングが正確であれば、彼らがいない場合は、あなたに何が起こっているかを知らせる例外を得るでしょう。 – EnabrenTane
ありがとうございます。 – laura