Вложенная форма Rails с использованием элемента file_field - PullRequest
1 голос
/ 10 февраля 2010

Я использую код, найденный на Railscast 197, для создания вложенных форм с использованием jQuery. Проблема, с которой я сталкиваюсь, заключается в том, что во вложенной модели используется элемент file_field, и поэтому при просмотре представления edit я просто вижу список пустых элементов file_field. Есть ли способ, с помощью которого я могу сказать rails отображать что-то еще (например, отключенное поле text_), когда пользователь просматривает представление edit , но поле file_field при просмотре представления new ?

Это часть, которую я использую:

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

это то, что добавляет частичное, я предполагаю, что где-то здесь мне нужно иметь какое-то условие, которое указывает рельсам визуализировать другое частичное, если объект уже создан или нет. У кого-нибудь есть идеи как мне это сделать?

1 Ответ

3 голосов
/ 11 февраля 2010

Самый простой способ различить действия 'new' и 'edit' - это проверить form.object.new_record? Это вернет true для «нового» действия и false для «редактирования».

Так что вы могли бы сделать то есть

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