Ruby on rails 调用自定义工厂方法而不是new()的嵌套表单
这个问题与这个问题有关: 我有一个叫波斯特的模特。我必须在后期创建期间传入IP地址。我被告知不要重写initialize()。因此,我使用了此处建议的工厂方法:Ruby on rails 调用自定义工厂方法而不是new()的嵌套表单,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,这个问题与这个问题有关: 我有一个叫波斯特的模特。我必须在后期创建期间传入IP地址。我被告知不要重写initialize()。因此,我使用了此处建议的工厂方法: 但是,这不会被调用,因为Post嵌套在讨论中,并且嵌套表单不会调用此工厂方法。我如何使表单调用它而不是传统的Post.new()?如果这是作为表单的嵌套属性传递的,那么您必须重写讨论模型的posts\u attributes=方法: def posts_attributes=(attribute_sets) attribute_se
但是,这不会被调用,因为Post嵌套在讨论中,并且嵌套表单不会调用此工厂方法。我如何使表单调用它而不是传统的
Post.new()
?如果这是作为表单的嵌套属性传递的,那么您必须重写讨论
模型的posts\u attributes=
方法:
def posts_attributes=(attribute_sets)
attribute_sets.each do |attributes|
Post.new_with_ip(ip_goes_here, attributes)
end
end
当然,如果你想以一种更新的方式获得嵌套的帖子,你需要稍微修改一下,因为你想更新现有的帖子,而不是创建新的帖子。听起来是一个很好的学习练习:)谢谢。这是否意味着我必须在讨论中添加工厂方法才能从控制器传递IP地址?@lulalala:您可以将
IP
设置为讨论
模型上的虚拟属性(使用attr\u访问器
),并在从控制器传递参数时进行设置。
def posts_attributes=(attribute_sets)
attribute_sets.each do |attributes|
Post.new_with_ip(ip_goes_here, attributes)
end
end