此问题与此问题有关:Hashing an IP for saving
我有一个名为Post的模型。我必须在创建帖子时传入IP地址。我被告知不要覆盖initialize()。所以我使用了这里建议的工厂方法:how to override new method for a rails model:
#Post.rb model
def self.new_with_ip(ip, attributes={})
self.new(attributes['one_day_id'] = do_some_conversion_on(ip))
end
但是这不会被调用,因为Post嵌套在Discussion中,并且嵌套的表单不会调用此工厂方法。如何使表单调用此而不是传统的Post.new()
?
答案 0 :(得分:2)
如果将此作为表单的嵌套属性传递,则必须覆盖posts_attributes=
模型的Discussion
方法:
def posts_attributes=(attribute_sets)
attribute_sets.each do |attributes|
Post.new_with_ip(ip_goes_here, attributes)
end
end
当然,如果您要以更新方式获取嵌套帖子,您将需要稍微修改一下,因为您需要更新现有帖子而不是创建新帖子。听起来像学习中的一个很好的练习:)