2013-03-04 4 views
0

Comment créer un formulaire dans Paperclip, ActiveAdmin et Formtastic? L'image ne fait pas partie du modèle, mais fait partie d'un sous-modèle.Rubis, Paperclip, Formtastic, ActiveAdmin et images

J'ai essayé:

form :html => {:multipart => true} do |f| 
    f.inputs "Ticket Info" do 
     ... 
     f.input :image1.photo 
     f.input :image2.photo 

Mais il a donné une erreur ActionView::Template::Error (undefined method 'photo' for :image1:Symbol):.

Voici le modèle de billets:

class Ticket < ActiveRecord::Base 
    attr_accessible ... :image1_id, :image2_id 
... 
    belongs_to :image1, class_name: "TicketImage" 
    belongs_to :image2, class_name: "TicketImage" 

Voici le modèle TicketImage:

class TicketImage < ActiveRecord::Base 
    attr_accessible :file, :photo 
    has_one :ticket 
    has_attached_file :photo, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png" 
end 

J'ai aussi essayé f.input :image1 mais il m'a donné une boîte de sélection vide.


J'ai aussi essayé f.input :image1, :as => :file, mais il m'a donné cette erreur après avoir sélectionné un fichier et cliqués soumettre:

ActiveRecord::AssociationTypeMismatch in Admin::TicketsController#update 
TicketImage(#89768376) expected, got ActionDispatch::Http::UploadedFile(#29533068) 

J'ai aussi essayé

f.semantic_fields_for :image1 do |image| 
     image.input :photo, :as => :file, :name => "Image1" 
    end 
    f.semantic_fields_for :image2 do |image| 
     image.input :photo, :as => :file, :name => "Image2" 
    end 

mais seulement a donné un bouton de sélection de fichier étiqueté Photo, et après avoir soumis, a donné cette erreur:

ActiveRecord::AssociationTypeMismatch in Admin::TicketsController#update 
TicketImage(#86546820) expected, got ActiveSupport::HashWithIndifferentAccess(#20656416) 

J'ai aussi essayé ceci: Ajouté:

ActiveAdmin.register Ticket do 
    ... 
    f.input :photo, :as => :file, :for => :image1, :name => "Image 1" 

class Ticket < ActiveRecord::Base 
    attr_accessible ... :image1_id, :image2_id, :image1_attributes, ... 
    accepts_nested_attributes_for :image1, :image2, :allow_destroy => true 


class TicketImage < ActiveRecord::Base 
    attr_accessible :file, :photo, :photo_file_name, :photo_content_type, :photo_file_size, :photo_updated_at 

Et la zone de téléchargement de fichier apparaît et accepte un téléchargement, mais dans le journal, il dit:

WARNING: Can't mass-assign protected attributes: photo 

J'ai également essayé ceci, qui fonctionne avec UN champ de téléchargement, mais quand les deux sont mis dans le formulaire, NI NE s'affichent! Il n'y a pas d'erreur dans le journal du serveur soit:

f.semantic_fields_for :image1 do |image| 
    image.input :photo, :as => :file, :name => "Image1", :hint => image.object.nil? ? "No Image" : f.template.image_tag(image.object.photo.url(:thumb)) 
    end 
    # f.semantic_fields_for :image2 do |image| 
    # image.input :photo, :as => :file, :name => "Image2", :hint => image.object.nil? ? "No Image" : f.template.image_tag(image.object.photo.url(:thumb)) 
    # end 

J'ai essayé aussi ce qui semble fonctionne tout le chemin et enregistrer des images, sauf qu'il vous permet de créer un à plusieurs avec le champ image1, qui n'est qu'une seule entrée! Je n'ai pas essayé d'ajouter deux images à image1, mais je m'attends à ce que ça plante.

f.has_many :image1 do |p| 
    p.input :photo, :as => :file, :label => "Image 1", :hint => p.template.image_tag(p.object.photo.url(:thumb)) 
    p.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove image' 
    end 
    f.has_many :image2 do |p| 
    p.input :photo, :as => :file, :label => "Image 2", :hint => p.template.image_tag(p.object.photo.url(:thumb)) 
    p.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove image' 
    end 

Cela fonctionne le mieux, mais des conseils ne fonctionnent pas!

f.inputs :photo, :as => :file, :for => :image1, :name => "Image 1", :hint => "A Hint" 
    f.inputs :photo, :as => :file, :for => :image2, :name => "Image 2", :hint => "A Hint" 

Répondre

0

formes emboîtées sont également pris en charge par Formtastic:

form :html => {:multipart => true} do |f| 
    f.input :number 
    f.semantic_fields_for :image1 do |image| 
    image.input :photo, :name => "Image1" 
    f.semantic_fields_for :image2 do |image| 
    image.input :photo, :name => "Image2" 
+0

J'ai essayé, mais a obtenu cette erreur: 'TicketImage (# 83482896) prévu, obtenu ActiveSupport :: HashWithIndifferentAccess (# 20656416)'. De plus, un seul champ Photo est apparu.J'ai aussi dû ajouter 'end' après chaque bloc. – Chloe

+0

Salut, je pense que Ticket has_many TicketImage, pas appartient à – why

+0

Naa, Rails est en arrière. Toutes mes autres relations sont belongs_to (ce qui signifie vraiment has_one). J'ai essayé de le changer en has_one, et en visualisant le formulaire, et il s'est écrasé avec l'erreur: Colonne inconnue 'ticket_images.ticket_id'. – Chloe

Questions connexes