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

时间:2009-08-22 10:25:34

标签: 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

d

缩略图:

class Thumbnail < ActiveRecord::Base

  belongs_to :video

end

我正在使用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 -%>

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

参数:

{ “提交”=&gt; “中保存”,  “video”=&gt; {“name”=&gt;“卡拉扬 - 贝多芬第7号交响曲”,  “URL”=&gt; “中s8eigkwmMEo”,  “USER_ID”=&gt; “中1”,  “缩略图”=&gt; {“url”=&gt;“http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg”}}} &lt;应该有4个缩略图

2 个答案:

答案 0 :(得分:6)

我找到了正确的答案:

<% f.fields_for "thumbnails_attributes[]", Thumbnail.new do | t | %GT;

而不是

<%  f.fields_for :thumbnails, video do |t| %>

答案 1 :(得分:0)

您应该使用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 -%>

通过rails演示关于复杂形式的edipode三部曲: Episode 1