在我的Ruby on Rails应用程序中,我想为配置文件创建一个新的配置文件和一个新的统计信息,所有这些都首先从用户模型调用相关方法,然后从配置文件模型调用。
所以......
...在我的用户模型中(user.rb)我有这个:
...
has_one :profile
...
before_save :inizialize_user
...
private
def inizialize_user
@user_profile = Profile.new
self.user_profile_id = @user_profile.id
end
...在我的个人资料模型中(profiles.rb)我有这个:
...
belongs_to :user
...
before_save :inizialize_profile
private
def inizialize_profile
@profile_statistic = ProfileStatistic.new
end
在第二个代码块中,在“before_save”上,它实例化一个新的配置文件统计信息: “检查”@profile_statistic会产生一个新对象(正确!)
在第一个代码块中,在“before_save”上,它不会实例化新的配置文件: “检查”@user_profile结果为零(它必须是一个新的配置文件对象!)
最后一部分是我的问题。为什么会这样?
答案 0 :(得分:3)
当你调用Profile.new
时,它只在内存中创建一个实例,它不会保存到数据库中,因此没有id
属性(即@ user_profile.id为nil)
我建议你替换
@user_profile = Profile.new
与
@user_profile = Profile.create
create
将保存实例,然后@ user_profile.id将不会为nil。
您可能还想使用before_create
回调(不是before_save
),或者每次保存模型时都会有新的用户配置文件(例如,在udpating之后)。此外,你可能想要
ProfileStatistic.create
而不是
ProfileStatistic.new