Создать вложенное поле только для новой записи - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть вложенная форма, в которой я хотел бы, чтобы поля формы появлялись только один раз для загрузки нового изображения, а затем отображали существующие изображения без какой-либо возможности CRUD.По сути, на странице редактирования просто дайте возможность добавлять изображения, но не удалять или обновлять.

Отношение - это video, имеет много video_images, которые используют скрепку для has_attached_file :image I 'Сейчас я пытаюсь выполнить следующие действия в моем контроллере:

  # GET /videos/new
  # GET /videos/new.json
  def new
    @video = current_user.videos.build
    @newthumbnail = @video.video_images.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @video }
    end
  end

И это, на мой взгляд:

    <%= f.fields_for @newthumbnail do |u| %>
        <%= u.label :image, "Upload New Thumbnail" %> <br />
        <%= u.file_field :image, :class => "image_uploader" %>
    <% end %>
    <p>
      Or select a previous thumbnail
    </p>
    <div id="previous_thumbnails">
      <!-- These will ultimately be dynamically generated as the existing image associations -->
      <div class="previous_thumbnail" rel="1">
        <img src="http://placehold.it/120x90" />
      </div>
      <div class="selected previous_thumbnail" rel="2">
        <img src="http://placehold.it/120x90" />
      </div>
      <div class="previous_thumbnail" rel="3">
        <img src="http://placehold.it/120x90" />
      </div>
      <div class="previous_thumbnail" rel="4">
        <img src="http://placehold.it/120x90" />
      </div>
    </div>

Но я получаю следующую ошибку:

unknown attribute: video_image

Что говорит мне, что где-то есть неправильный перевод единственности против множественности.Я могу понять, почему Rails выделил это, поскольку это, по сути, одна запись.Однако, даже переопределяя имя поля файла и переводя name="video[video_image][image]" в name="video[video_images][image]", я получаю сообщение об ошибке:

VideoImage(#39741260) expected, got Array(#9591480)

При отправке параметров:

"video_images"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x000000054f1078 @original_filename="Bill OneManBand.jpg",
 @content_type="image/jpeg",
 @headers="Content-Disposition: form-data; name=\"video[video_images][image]\"; filename=\"Bill OneManBand.jpg\"\r\nContent-Type: image/jpeg\r\n",
 @tempfile=#<File:/tmp/RackMultipart20120205-3582-1xp2duq>>},

Так куда я иду не так?Я чувствую, что могу ошибочно подойти к этому ...

1 Ответ

3 голосов
/ 06 февраля 2012

Измените это

<%= f.fields_for @newthumbnail do |u| %>

на это

<%= f.fields_for :video_images, @newthumbnail do |u| %>

Это должно позволить полям знать, что они являются частью video, а не просто случайными video_image полями

Также убедитесь, что у вас accepts_nested_attributes_for в вашей video модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...