Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 Rails字段\u for:child\u索引选项说明_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails字段\u for:child\u索引选项说明

Ruby on rails Rails字段\u for:child\u索引选项说明,ruby-on-rails,Ruby On Rails,我一直在尝试创建一个包含许多嵌套模型的复杂表单,并使其动态化。现在我发现,使用嵌套的属性创建嵌套模型并不困难,但是如果有多个嵌套模型,则创建嵌套的动态模型似乎是不可能的 我遇到了一个做得非常优雅的人。有人能解释一下13号线和16号线吗 13 form_builder.object.class.reflect_on_association(method).klass.new 及 根据直觉,第13行实例化了一个新对象,但为什么它必须执行这么多方法调用呢?我在第16行找不到任何关于:child_in

我一直在尝试创建一个包含许多嵌套模型的复杂表单,并使其动态化。现在我发现,使用嵌套的属性创建嵌套模型并不困难,但是如果有多个嵌套模型,则创建嵌套的动态模型似乎是不可能的

我遇到了一个做得非常优雅的人。有人能解释一下13号线和16号线吗

13 form_builder.object.class.reflect_on_association(method).klass.new

根据直觉,第13行实例化了一个新对象,但为什么它必须执行这么多方法调用呢?我在第16行找不到任何关于:child_index选项的文档。创建表单时,很大一部分被用作新模型的索引,而现有模型则通过其id进行索引。这是如何工作的

options[:object] ||= form_builder.object.class.reflect_on_association(method).klass.new
如果对象未作为参数传递,它将创建相应类的新对象

form\u builder.object
从表单(
project
)获取主对象

form\u builder.object.class
获取其类(
Project

方法
是项目的关联名称(
:任务

给出一个对象

对关联(方法)进行反思。返回关联的类。(
任务

最后,klass.new创建一个新实例(
Task.new
=>newtask)

之所以这样做,是因为关联名称并不总是像本例中的(Task-:tasks)那样只是一个复数类名,而是需要获取类对象来创建它的新实例

form_builder.fields_for(method, options[:object], :child_index => "new_#{method}") do |f|
:child_index
选项允许您指定特定对象的索引:

project[tasks_attributes][:child_index][field_name]
Rails将其设置为“new#{method}”,但随后被javascript(application.js)替换:


索引设置为一个较大的数字,只是为了不与现有项冲突。顺便说一下,它们不是按id索引的,只是从0到count-1

如果数据库的索引从0到count-1,Rails如何知道要删除哪些内容?我缺少一些内容。它为每个记录插入隐藏字段,其中包含id:
。查看HTML源代码以了解Rails生成的内容是个好主意。@Voyta所以它有HTML部分的id和Rails对象的id,对吗?
project[tasks_attributes][:child_index][field_name]
function insert_fields(link, method, content) {
  var new_id = new Date().getTime();
  var regexp = new RegExp("new_" + method, "g")
  $(link).up().insert({
    before: content.replace(regexp, new_id)
  });
}