Rails: сохранение множества новых объектов во вложенной форме - PullRequest
6 голосов
/ 22 августа 2009

У меня есть 2 модели:

Видео:

class Video < ActiveRecord::Base
  belongs_to :user
  has_many :thumbnails
  attr_accessor :search, :saveable
  accepts_nested_attributes_for :thumbnails, :allow_destroy => true
en

D

Эскиз:

class Thumbnail < ActiveRecord::Base

  belongs_to :video

end

Я использую драгоценный камень YouTubeG для поиска видео.

Каждое видео, которое возвращается при поиске, имеет вид в виде:

<% form_for :video, :url => videos_path, :html => { :class => :form } do |f| -%>
  <%= f.hidden_field :url, :value => video.unique_id %>
  <%= f.hidden_field :name, :value => video.title %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <% if video.thumbnails.present? %>
    <%  f.fields_for :thumbnails, video do |t| %>
      <% video.thumbnails.each do |thumbnail| -%>
        <%=image_tag thumbnail.url %>
        <%=t.text_field :url, :value => thumbnail.url %>
      <% end -%>
    <% end -%>
  <% end %>
  <%= f.submit "Save" %>
<% end -%>

Создает f.fields_for: thumbnails <input type="hidden" value="http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg" name="video[thumbnails][url]" id="video_thumbnails_url"/>

, что кажется неправильным, потому что я хочу сохранить все миниатюры для этого видео.

Когда я пытаюсь сохранить, я получаю

ActiveRecord :: AssociationTypeMismatch в VideosController # create

Параметры:

{ "совершить" => "Сохранить", "video" => {"name" => "Караян - Симфония Бетховена № 7", "URL" => "s8eigkwmMEo", "User_id" => "1", "thumbnails" => {"url" => "http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg"}}} <должно быть 4 эскиза </strong>

Ответы [ 2 ]

6 голосов
/ 22 августа 2009

Я нашел правильный ответ:

<% f.fields_for "thumbnails_attributes[]", Thumbnail.new do | т | %>

вместо

<%  f.fields_for :thumbnails, video do |t| %>
0 голосов
/ 22 августа 2009

Вы должны использовать индексную функцию помощника fields_for:

  <% video.thumbnails.each do |thumbnail| -%>
  <%  f.fields_for "thumbnail[]", thumbnail do |t| %>  
    <%=image_tag thumbnail.url %>
      <%=t.text_field :url, :value => thumbnail.url %>
    <% end -%>
  <% end -%>

Просмотр рельсов, отливки, эдиподы, трилогия о сложных формах: Эпизод 1

...