Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 调用自定义工厂方法而不是new()的嵌套表单_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 调用自定义工厂方法而不是new()的嵌套表单

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

这个问题与这个问题有关:

我有一个叫波斯特的模特。我必须在后期创建期间传入IP地址。我被告知不要重写initialize()。因此,我使用了此处建议的工厂方法:


但是,这不会被调用,因为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