У меня есть модель base_table
, и у меня есть extended_table
, которая имеет дополнительные свойства для дальнейшего расширения моего base_table
. (У меня бы были разные extended_tables, чтобы добавить разные свойства в мою base_table, но это не связано с вопросом, который я задаю здесь).rails callback перед «новым» модели?
Определение модели для моего 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, прежде чем TennisQuestionaire.new был вызван параметрами. Здесь что-то вроде наличия фильтра before_new. Но я не могу найти такой фильтр, когда читал документацию.
Кроме того, я думаю, что другой способ - переопределить «новый» метод. Но это не так чисто.
ПРИМЕЧАНИЕ: Существует один метод, называемый accepts_nested_attributes_for
, кажется, что он делает то, что я хочу, но он не работает с отношением belongs_to
.
Любые предложения будут оценены. Спасибо :)
Похоже, вы должны обратить отношения и использовать 'has_one' вместо этого. – thomasfedb