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