我有一组模型,它们做以下工作:
1)画廊有许多图像,属于一本书
belongs_to :books
has_many :images
accepts_nested_attributes_for :books
accepts_nested_attributes_for :images, :allow_destroy => true
//图片库控制器
class GalleriesController < ApplicationController
before_action :set_gallery, only: [:show, :edit, :update, :destroy]
def index
@galleries = Gallery.all
end
def show
end
def new
@gallery = Gallery.new
end
def edit
end
def create
@gallery = Gallery.new(gallery_params)
end
def update
end
def destroy
@gallery.destroy
end
private
def set_gallery
@gallery = Gallery.find(params[:id])
end
def gallery_params
params.require(:gallery).permit(:name, :book_id)
end
end
2)图片属于画廊
belongs_to :gallery
has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :file, :content_type => /\Aimage\/.*\Z/
//图像控制器
3)一本书只有一个画廊
belongs_to :author
has_one :gallery
accepts_nested_attributes_for :author
accepts_nested_attributes_for :gallery
Gemfile:
gem 'simple_form'
gem 'nested_form'
在图片库的表单中,我得到了simple_fields_for,并在其中生成了表单字段,以便图像上传,因为创建库需要多个数量,如下所示:
<%= simple_form_for(@gallery, html: { multipart: true }) do |f| %>
<%= f.error_notification %>
<div class="inputs">
<%= f.input :name %>
<%= f.input :book_id %>
<%= f.simple_fields_for :image do |a| %>
<%#= f.input :picture %>
<%#= a.file_field :file %>
<%= f.input_field :file, as: :file, multiple: true, name: 'gallery[image]' %>
<% end %>
</div>
<div class="actions">
<%= f.button :submit %>
</div>
<% end %>
然后,在我的书形式,我创造了一本书,我有一个形式,我想嵌套画廊形式,所以我可以添加一个画廊为每一本书的创作。由于某些原因,它似乎不起作用,我不断地犯错误:
undefined method `simple_nested_form_for' for #<SimpleForm::FormBuilder:0x00000104d52640
表格在下面。
<%= simple_form_for(@book, :html => { :multipart => true }) do |f| %>
<%= f.simple_nested_form_for (@gallery) do |t| %>
<%= t.simple_fields_for :gallery do |t| %>
<%= render 'galleries/form' %>
<% end %>
<% end %>
<% end %>
这些错误似乎是由于它找不到那个方法造成的,我已经重新启动了服务器两次,但仍然得到了相同的错误。
我遇到的问题是把画廊放在书里面,这样我就可以创作这本书了。
发布于 2014-09-16 12:30:16
您正在尝试将表单包含在表单中。也就是说,你的<%= simple_form_for(@gallery, html: { multipart: true }) do |f| %>
在<%= simple_form_for(@book, :html => { :multipart => true }) do |f| %>
下面。
您应该一次只有一个表单实例。其他的应该像<%= t.simple_fields_for :xyz do |t| %>
。
因此,从您的图库表单中删除<%= simple_form_for(@gallery, html: { multipart: true }) do |f| %>
。如果您需要任何其他帮助,您可以跟踪ryan栏杆的嵌套表单。http://railscasts.com/episodes/196-nested-model-form-part-1 & http://railscasts.com/episodes/197-nested-model-form-part-2 .
对于嵌套模式下的简单表单,请遵循form/wiki/Nested-Models
https://stackoverflow.com/questions/25866911
复制相似问题