Rails:以嵌套形式保存许多新对象

Kie*_*yes 6 ruby-on-rails nested-forms

我有2个型号:

视频:

class Video < ActiveRecord::Base
  belongs_to :user
  has_many :thumbnails
  attr_accessor :search, :saveable
  accepts_nested_attributes_for :thumbnails, :allow_destroy => true
en
Run Code Online (Sandbox Code Playgroud)

d

缩略图:

class Thumbnail < ActiveRecord::Base

  belongs_to :video

end
Run Code Online (Sandbox Code Playgroud)

我正在使用YouTubeG gem来搜索视频.

搜索返回的每个视频在视图中都有一个表单:

<% 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 -%>
Run Code Online (Sandbox Code Playgroud)

f.fields_for:缩略图生成 <input type="hidden" value="http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg" name="video[thumbnails][url]" id="video_thumbnails_url"/>

这似乎是错误的,因为我想保存此视频的所有缩略图.

当我试图保存时,我得到了

VideosController #create中的ActiveRecord :: AssociationTypeMismatch

参数:

{"commit"=>"保存","视频"=> {"名称"=>"卡拉扬 - 贝多芬第7号交响曲","url"=>"s8eigkwmMEo","user_id"=>"1","缩略图"=> {"url"=>" http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg "}}} <应该有4个缩略图

Kie*_*yes 6

我找到了正确的答案:

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

代替

<%  f.fields_for :thumbnails, video do |t| %>
Run Code Online (Sandbox Code Playgroud)