2013-07-13 3 views
1

У меня есть две модели @product и @photo с @photo, вложенными в @product. Мне разрешено использовать только одну форму для создания обоих. Я использую this JQuery plugin, чтобы обрабатывать загрузку фотографий, так как это дает мне хороший предварительный просмотр.Создание одной вложенной формы для использования двух разных контроллеров

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

  1. Возможно ли иметь один вложенный for_ для использования двух разных контроллеров?
  2. И как бы я это сделал?

моя форма (Haml)

= form_for @product,:url => products_path, :html => { id: "fileupload", multipart: true } do |f| 
    %p 
    = f.text_field :name, placeholder: "Name" 
    %p 
    = f.text_field :price, class: "auto", data: { a_sign: "$ " }, placeholder: "Price" 
    %p 
    = f.text_field :description, placeholder: "Description" 
    %p 
    = f.fields_for :photos do |fp| 
     =fp.file_field :image 
     %br 

    .files{"data-target" => "#modal-gallery", "data-toggle" => "modal-gallery"} 
    %p.button.start 
    = f.submit 

ответ

1
You can use accept_nested_attributes for to save associated data with only one create action. 

Eg:- 
class AlbumsController < ApplicationController 
    def new 
    @album = Album.new 
    @album.photos.build 
    end 

    def create 
    @album = Albums.new(params[:album]) 
    @album.photos.build unless @album.photos.present? 
    if @album.save 
     flash[:notice] = "Successfully created albumn" 
     respond_with(@album, :location => albums_path()) 
    else 
     flash[:error] = @album.errors.full_messages 
     render :new 
    end 
    end 
end 

Model:- 

class Album < ActiveRecord::Base 
    has_many :photos, dependent: :destroy 
    accepts_nested_attributes_for :photos, allow_destroy: true, reject_if: proc {|attr| attr['image'].blank? } 
end 

class Photo < ActiveRecord::Base 
    belongs_to :album 
end 

View:- 
= form_for @album,:url => albums_path, :html => {multipart: true } do |f| 
    %p 
    = f.text_field :name, placeholder: "Name" 
    %p 
    = f.text_field :price, class: "auto", data: { a_sign: "$ " }, placeholder: "Price" 
    %p 
    = f.text_field :description, placeholder: "Description" 
    %p 
    = f.fields_for :photos do |photo| 
     = photo.file_field :image 
     %br 

    .files 
    %p.button.start 
    = f.submit 
-1

Использование Ajax, во-первых загрузить фото и после успешного ответа по-прежнему с продуктом.

+0

Могу ли я получить какой-то пример? –

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