gpt4 book ai didi

jquery - 使用 file_field 元素的 Rails 嵌套表单

转载 作者:行者123 更新时间:2023-12-01 08:28:02 26 4
gpt4 key购买 nike

我正在使用 Railscast 197 中找到的代码来使用 jQuery 创建嵌套表单。我面临的挑战是嵌套模型使用 file_field 元素,因此在查看 edit View 时我只看到空 file_field 元素的列表。有没有办法让 Rails 在用户查看 edit View 时显示其他内容(例如禁用的 text_field),但在查看 new View 时显示 file_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 在对象是否已经创建或未创建的情况下渲染不同的部分。任何人都有任何想法我怎样才能做到这一点?

最佳答案

区分“新建”和“编辑”操作的最简单方法是检查 form.object.new_record?这将为"new"操作返回 true,为“编辑”操作返回 false。

所以你可以这样做

<%= f.file_field :inputfile, :class => 'text' if f.object.new_record? %>

关于jquery - 使用 file_field 元素的 Rails 嵌套表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237528/

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