【发布时间】:2014-01-26 04:50:23
【问题描述】:
我有一个模型base_table,我有一个extended_table,它具有进一步扩展我的base_table 的额外属性。 (我会有不同的扩展表,以向我的 base_table 添加不同的属性,但这与我在这里提出的问题无关)。
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_table 也被实例化。
我能想出的一个解决方法是在调用参数 TennisQuestionaire.new 之前解析参数以创建 base_table 对象。这就像在这里有一个“before_new”过滤器。但是我在阅读文档时找不到这种过滤器。
此外,我认为另一种方法是覆盖“新”方法。但这不是那么干净。
注意:有一种方法称为 accepts_nested_attributes_for,似乎可以满足我的要求,但它不适用于 belongs_to 关系。
任何建议将不胜感激。谢谢:)
【问题讨论】:
-
看来您应该颠倒关系并改用
has_one。
标签: ruby-on-rails activerecord ruby-on-rails-4 rails-models