0
我有一个模型base_table
,并且我有一个extended_table
,它有其他属性可以进一步扩展我的base_table
。 (我会有不同的extended_tables,为我的base_table添加不同的属性,但这与我在此问的问题无关)。在模型的“新”之前回调rails?
模型定义了我的base_table
是这样的:
class BaseTable < ActiveRecord::Base
module BaseTableInclude
def self.included(base)
base.belongs_to :base_table, autosave:true, dependent: :destroy
# do something more when this module is included
end
end
end
而且我extended_table
模型的定义是这样的:
class TennisQuestionaire < ActiveRecord::Base
include BaseTable::BaseTableInclude
end
现在我什么,我要的是下面的代码:
params = {base_table: {name:"Songyy",age:19},tennis_ball_num:3}
t = TennisQuestionaire.new(params)
当我创建我的t
时,我想要base_ta也可以被实例化。
我可以想出一个解决办法,就是解析参数以创建base_table对象,然后在Params上调用TennisQuestionaire.new。这就像在这里有一个“before_new”过滤器。但是当我阅读文档时,我找不到这样的过滤器。
此外,我认为另一种方法是重写'新'方法。但这并不是那么干净。
注意:有一种方法称为accepts_nested_attributes_for
,似乎做我想要的,但它不起作用于belongs_to
关系。
任何建议,将不胜感激。谢谢:)
好像你应该反向的关系,并使用'has_one'代替。 – thomasfedb