首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在rails简单表单中嵌入/嵌套多个表单的最佳方法是什么?

在rails简单表单中嵌入/嵌套多个表单的最佳方法是什么?
EN

Stack Overflow用户
提问于 2014-09-16 10:55:19
回答 1查看 997关注 0票数 0

我有一组模型,它们做以下工作:

1)画廊有许多图像,属于一本书

代码语言:javascript
代码运行次数:0
运行
复制
belongs_to :books
has_many :images
accepts_nested_attributes_for :books
accepts_nested_attributes_for :images, :allow_destroy => true

//图片库控制器

代码语言:javascript
代码运行次数:0
运行
复制
 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)图片属于画廊

代码语言:javascript
代码运行次数:0
运行
复制
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)一本书只有一个画廊

代码语言:javascript
代码运行次数:0
运行
复制
belongs_to :author
has_one :gallery

accepts_nested_attributes_for :author
accepts_nested_attributes_for :gallery

Gemfile:

代码语言:javascript
代码运行次数:0
运行
复制
gem 'simple_form'
gem 'nested_form'

在图片库的表单中,我得到了simple_fields_for,并在其中生成了表单字段,以便图像上传,因为创建库需要多个数量,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
<%= 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 %>

然后,在我的书形式,我创造了一本书,我有一个形式,我想嵌套画廊形式,所以我可以添加一个画廊为每一本书的创作。由于某些原因,它似乎不起作用,我不断地犯错误:

代码语言:javascript
代码运行次数:0
运行
复制
undefined method `simple_nested_form_for' for #<SimpleForm::FormBuilder:0x00000104d52640

表格在下面。

代码语言:javascript
代码运行次数:0
运行
复制
<%= 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 %>

这些错误似乎是由于它找不到那个方法造成的,我已经重新启动了服务器两次,但仍然得到了相同的错误。

我遇到的问题是把画廊放在书里面,这样我就可以创作这本书了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25866911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档