我有一个应用程序,我正在尝试添加 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。我只有没有原型的 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));
}
我找不到任何其他评论表明此代码不起作用,所以我一定是做错了什么。有什么想法吗?