代码之家  ›  专栏  ›  技术社区  ›  Rabbott

使用file_field元素的rails嵌套表单

  •  1
  • Rabbott  · 技术社区  · 15 年前

    我正在使用在RailsCast197中找到的代码使用jQuery创建嵌套表单。我面临的挑战是,嵌套模型使用了一个文件字段元素,因此在查看 编辑 视图我只看到一个空文件字段元素列表。当用户查看 编辑 视图,但在查看 新的 视野?

    这是我正在使用的部分:

    <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;
    });
    

    但在我的部分表格中,我有:

    <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如果对象已经创建或没有创建,那么呈现不同的部分。有人对我怎样才能做到这一点有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   szimek    15 年前

    区分“新建”和“编辑”操作的最简单方法是检查form.object.new\u记录?“new”操作将返回true,而“edit”操作将返回false。

    所以你可以这样做。

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