gpt4 book ai didi

jquery - 如 Railscast 197 中所述在表单上动态添加子字段不使用 :child_index parameter to generate html name attribute

转载 作者:行者123 更新时间:2023-12-01 05:03:57 26 4
gpt4 key购买 nike

我有一个应用程序,我试图添加记录,如 Railscast 编号 197 所示。我的对象更简单,因为我只有一层父/子关系:患者和事件。该代码可以很好地删除子记录(事件),但由于以下原因添加记录失败。我能够创建一个新对象,生成要在表单上显示的字段,并且表单看起来不错。然而,生成的 html 中的 name 属性缺少 :child_index 。生成的 html 示例如下:

<textarea cols="30" id="patient_events_attributes_description" name="patient[events_attributes][description]" rows="3"></textarea>

现有记录的 html 为:

<textarea cols="30" id="patient_events_attributes_1_description" name="patient[events_attributes][1][description]"     rows="3">Opgepakt met gestolen goederen</textarea>

请注意,新 html 中缺少现有记录中的 [1]。当然它不应该是1,而是new_xxx,然后用一个唯一的数字替换。但生成的 html 中缺少整个 [new_xxx]。有谁知道出了什么问题吗?

我正在使用 Ruby 1.9.2 和 Rails 3.0.10。我只有没有原型(prototype)的 JQuery 或 query-ujs。

我正在使用的代码如下所示,但它是 Railscast 代码的副本:

    def link_to_remove_fields(name, f)
f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
end

def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| # new_#{association}
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
end

function remove_fields(link) {
$(link).prev("input[type=hidden]").val = "1";
$(link).closest(".fields").hide();
}

function add_fields(link, association, content) {
alert(content);
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g");
$(link).before(content.replace(regexp, new_id));
}

我还没有找到任何其他评论表明这段代码不起作用,所以我一定是做了一些非常错误的事情。有什么想法吗?

最佳答案

查看fields_for的源码后,发现了两个问题:1. 不使用:child_index参数,而是使用:index选项。2. fields_for 仅在传递的对象是事件记录对象或数组时生成正确的 html。我更改了传递给类型数组的参数,使用新的空白对象作为 [0] 条目。

值得注意的是,没有关于此功能的文档。这使得 ROR 使用起来非常耗时,除非你出生在那里。

最终运行的代码如下。请注意,如果要添加更多记录,则必须将“99”替换为唯一的数字。

我还没有完全正常工作,因为 @patent.update_attributes(params[: Patient]) 给出了一些错误,但最糟糕的部分(添加 html)已修复。

def link_to_add_fields(name, g, association)
new_object = []
new_object[0] = g.object.class.reflect_on_association(association).klass.new
fields = g.fields_for(association, new_object, :index => '99') do |builder| # , {:child_index => "new_#{association}"} new_#{association}
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")

结束

关于jquery - 如 Railscast 197 中所述在表单上动态添加子字段不使用 :child_index parameter to generate html name attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com