2014-09-16 2 views
0

У меня есть множество моделей, которые необходимо выполнить следующие действия:Каков наилучший способ вставки/вставки нескольких форм в простой форме?

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 %> 

Затем в м y book form, где я создаю книгу. У меня есть форма, где я хочу вложить форму галереи, чтобы добавить галерею для каждого создания книги. По какой-то причине это не работает, и я продолжаю получать ошибки:

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 %> 

Эти ошибки, похоже, из-за того, что он не находит этот метод, я дважды перезапустил сервер, и я все равно получаю ту же ошибку.

Проблема, с которой я столкнулась, - это получить галерею внутри самой книги, чтобы я мог создать книгу.

ответ

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| %> из своей галереи. Если вам нужна другая помощь, вы можете следить за rayancasts для вложенных форм. http://railscasts.com/episodes/196-nested-model-form-part-1 & http://railscasts.com/episodes/197-nested-model-form-part-2.

Для простой формы в вложенном режиме https://github.com/plataformatec/simple_form/wiki/Nested-Models

Смежные вопросы