我正在使用Railscast 197中的代码来使用jQuery创建嵌套表单。我面临的挑战是嵌套模型使用file_field元素,因此在查看编辑视图时,我只看到一个空的file_field元素列表。当用户查看编辑视图时,有没有办法告诉rails显示其他内容(如禁用的text_field),而在查看新视图时是否有文件字段?
这是我正在使用的部分内容:
<div class="fields">
<p>
<%= f.label :document_type %>
<%= f.select :document_type, XmlDocument::SOURCES %>
</p>
<p>
<%= f.file_field :inputfile, :class => 'text' %>
<%= f.hidden_field(:_delete) + link_to('Remove', "javascript:void(0)", :class => "remove_child remove-xmldoc") %>
</p>
</div>
这是添加它的jQuery(在Railscast中略微修改以在显示部分时添加效果):
$('form a.add_child').click(function() {
var assoc = $(this).attr('data-association');
var content = $('#' + assoc + '_fields_template').html();
var regexp = new RegExp('new_' + assoc, 'g');
var new_id = new Date().getTime();
var newElements = jQuery(content.replace(regexp, new_id)).hide();
$(this).parent().before(newElements).prev().slideFadeToggle();
return false;
});
但在我的_form部分我有:
<div id="xml_documents">
<%= label_tag 'XML Documents' %>
<% form.fields_for :xml_documents do |stream_xml_document_form| %>
<%= render :partial => "xml_document", :locals => {:f => stream_xml_document_form} %>
<% end %>
<p><%= link_to('Add XML Document', "javascript:void(0)", :class => "add_child add-xmldoc", :"data-association" => :xml_documents) %></p>
<%= new_child_fields_template(form, :xml_documents) %>
</div>
这是添加部分的东西,我猜这里的某个地方我需要有某种条件,告诉rails如果对象已经创建或者没有呈现不同的部分..任何人都有任何想法至于我怎么能做到这一点?
答案 0 :(得分:3)
区分“新”和“编辑”操作的最简单方法是检查form.object.new_record?对于“新”操作,这将返回true,对于“编辑”操作,这将返回false。
所以你可以这样做。
<%= f.file_field :inputfile, :class => 'text' if f.object.new_record? %>