1

Railscast 197 にあるコードを使用して、jQuery を使用してネストされたフォームを作成しています。私が直面している課題は、ネストされたモデルが file_field 要素を使用していることです。このため、編集ビューを見ると、空の file_field 要素のリストが表示されます。ユーザーが編集ビューを表示しているときに別のもの (無効化された text_field など) を表示し、新しいビューを表示しているときは file_field を表示するように Rails に指示する方法はありますか?

これは私が使用しているパーシャルです:

<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>

これがパーシャルを追加するものです。ここのどこかに、オブジェクトが既に作成されているかどうかにかかわらず、レールに別のパーシャルをレンダリングするように指示する何らかの条件が必要であると推測しています..誰もがどのようにアイデアを持っていますか私はこれを達成できますか?

4

1 に答える 1

3

「新規」アクションと「編集」アクションを区別する最も簡単な方法は、form.object.new_record? を確認することです。これは、'new' アクションに対して true を返し、'edit' アクションに対して false を返します。

だからあなたはすなわちすることができます

<%= f.file_field :inputfile, :class => 'text' if f.object.new_record? %>
于 2010-02-10T21:04:23.310 に答える