我有一组模型可以执行以下操作:
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 %>
这些错误似乎是由于它没有找到该方法,我已经重启服务器两次而且我仍然得到相同的错误。
我遇到的问题是将图书馆放在书本中,以便我可以创作这本书。
答案 0 :(得分:1)
您正在尝试在表单中包含表单。即<%= 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 railscast。 http://railscasts.com/episodes/196-nested-model-form-part-1&amp; http://railscasts.com/episodes/197-nested-model-form-part-2。
对于嵌套模式下的简单表单,请按https://github.com/plataformatec/simple_form/wiki/Nested-Models