How do I create a form in Paperclip, ActiveAdmin, and Formtastic? The image is not part of the model, but part of a sub-model.
I tried:
form :html => {:multipart => true} do |f|
f.inputs "Ticket Info" do
...
f.input :image1.photo
f.input :image2.photo
But it gave an error ActionView::Template::Error (undefined method 'photo' for :image1:Symbol):
.
Here is the Ticket model:
class Ticket < ActiveRecord::Base
attr_accessible ... :image1_id, :image2_id
...
belongs_to :image1, class_name: "TicketImage"
belongs_to :image2, class_name: "TicketImage"
Here is the TicketImage model:
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
I also tried f.input :image1
but it just gave me an empty select box.
I also tried f.input :image1, :as => :file
, but it gave me this error after I selected a file and clicked submit:
ActiveRecord::AssociationTypeMismatch in Admin::TicketsController#update
TicketImage(#89768376) expected, got ActionDispatch::Http::UploadedFile(#29533068)
I also tried
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
but it only gave one file select button labeled Photo, and after I submitted, gave this error:
ActiveRecord::AssociationTypeMismatch in Admin::TicketsController#update
TicketImage(#86546820) expected, got ActiveSupport::HashWithIndifferentAccess(#20656416)
I also tried this: Added:
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
And the file upload box appears and accepts an upload, but in the log, it says:
WARNING: Can't mass-assign protected attributes: photo
I also tried this, which works with ONE upload field, but when both are put in the form, NEITHER are displayed! There are no errors in the server log either:
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
I also tried this, which seems to works all the way and save images, except it allows you to create one-to-many association with the image1 field, which is only a single entry! I haven't tried adding two images to image1, but I expect it to crash.
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
This works the best, but hints don't work!
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"
Nested forms are also supported by 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"