Ruby on rails Rails字段\u for:child\u索引选项说明
我一直在尝试创建一个包含许多嵌套模型的复杂表单,并使其动态化。现在我发现,使用嵌套的属性创建嵌套模型并不困难,但是如果有多个嵌套模型,则创建嵌套的动态模型似乎是不可能的 我遇到了一个做得非常优雅的人。有人能解释一下13号线和16号线吗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 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)
});
}