我有一个数据对象,它由同一个对象的三个子实例组成。我需要从该对象计算一个值并将其保存在数据库中。 (它后来被另一个应用程序从数据库中拉出来。)
我已经在下面模拟了我的类结构,基本上我想要一个将Child值data_one和data_two加在一起的方法,并将它存储到第三个变量total中。我猜这将是db父表中的total_first,total_second和total_third。我应该将total声明为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
答案 0 :(得分:2)
我无法想象为什么父母总会有两个孩子,为什么不是一个多元关系呢?取决于你是否需要多对多。希望没有看到这个例子。
你必须有自己的理由。
我会像你描述的那样使用回调。也许before_validations
并对其进行一些验证。请注意,在回调中返回非true值会导致记录不保存。
E.G如果条件为false,则该方法返回nil并且可以暂停保存回调链。
def before_save
if something_sometimes_is_false
#do normal code
end # could not run, which would return nil and break things
end
考虑最后回归自我。
def before_save
if something_sometimes_is_false
# do normal code
end
self # should always be a true value in an instance of a class. will not break call backs
end