在我的 Rails 应用程序中,我在 views/patients/_form.html.erb 中有以下代码
<div class="field">
<%= f.label :sex %><br />
<%= f.select :sex, [['Male','Female'],['Θ','1']] %>
</div>
<div>
<%= f.fields_for :female_patient do |fp| %>
<%=render "female_patient_fields", :f => fp %>
<% end %>
</div>
<p><%=link_to_add_fields "Add Female Info", f, :female_patient %></p>
部分代码是这个
在views/patients/_female_patient_fields.html.erb
=====FEMALE INFO=====
<div class="field">
<%= f.label :childbirths %><br />
<%= f.number_field :childbirths %>
</div>
<div class="field">
<%= f.label :last_period %><br />
<%= f.datetime_select :last_period %>
</div>
<p>
<%= link_to_remove_fields "remove", f %>
</p>
====================================
</div>
这
<%=link_to_add_fields "添加女性信息", f, :female_patient %>
和<%= link_to_remove_fields "remove", f %> 是指向应用程序助手的链接,它们为附加字段创建和销毁嵌套表单。
在 helpers/application_helper.rp
module ApplicationHelper
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|
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
end
end
链接工作正常,嵌套表单被创建/销毁,female_patient 对象被正确创建(或不)。(患者模型与女性患者具有has_one关系)。
我想不通的是,当性别的 f.select 字段(第一种形式)发生更改时,一种调用助手动作的方法。我希望嵌套表单在所选值为女性时出现,并在所选值为男性时消失。
编辑:使用的 jquery 函数是:
function remove_fields(link) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest(".female").hide();
}
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).parent().before(content.replace(regexp, new_id));
}
提前致谢