2017-06-26 2 views
1

Ich arbeite an meinem ersten Rails-Projekt und habe die Paperclip Gem installiert, um Image-Uploads zu behandeln. So wie es ist, funktioniert es gut, aber alle Upload-Felder werden angezeigt, um separat ausgefüllt zu werden, wie in dem Screenshot unten zu sehen ist.Umwandlung aller Eingabefelder in eine Schaltfläche mit Paperclip Gem in Ruby on Rails

enter image description here

Unten ist mein Code wie bei allen Bildeingabefelder einzeln ausgebrochen.

models/project.rb

class Project < ApplicationRecord 
    has_many :tasks 

    validates :name, presence: true, length: { maximum: 50 } 
    validates :content, presence: true, length: { maximum: 500 } 
    validates :price, presence: true, numericality: { only_integer: true } 

    has_attached_file :avatar, styles: { medium: '680x300>', thumb: '170x75>' }, default_url: '/images/:style/missing.png"' 
    validates_attachment_content_type :avatar, content_type: '/\Aimage\/.*\z/' 
end 

admin/project.rb

ActiveAdmin.register Project do 
    permit_params :name, :content, :price, :image 

    show do |t| 
    attributes_table do 
     row :name 
     row :content 
     row :price 
     row :image do 
     project.image? ? image_tag(project.image.url, height: '100') : content_tag(:span, 'No Photo Yet') 
     end 
    end 
    end 

    # form html: { enctype: 'multipart/form-data' } do |f| 
    # f.input do 
    #  f.input :name 
    #  f.input :content 
    #  f.input :price 
    #  f.input :image, hint: f.project.image? ? image_tag(project.image.url, height: '100') : content_tag(:span, 'Upload JPG/PNG/GIF Image') 
    # end 
    # f.actions 
    # end 
end 

Ich weiß, dass es einen Weg gibt, alle diese Eingänge zu nehmen ist, und haben sie als Teil automatische einer Upload-Schaltfläche, aber ich habe eine harte Zeit mit dem Code; Ich erhalte den Fehler unten, wenn ich den anderen Teil meines admin/project.rb Codes auskommentiere.

Ich bin mit ActiveAdmin, Paperclip 5.1 und Rails 5.1.1

Started GET "/admin/projects/2/edit" for 127.0.0.1 at 2017-06-26 13:14:33 -0700 
Processing by Admin::ProjectsController#edit as HTML 
    Parameters: {"id"=>"2"} 
    AdminUser Load (0.1ms) SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = ? ORDER BY "admin_users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]] 
    Project Load (0.1ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] 
    Rendering /Users/rooster/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activeadmin-1.0.0/app/views/active_admin/resource/edit.html.arb 
    CACHE Project Load (0.0ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] 
    Rendered /Users/rooster/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activeadmin-1.0.0/app/views/active_admin/resource/edit.html.arb (129.0ms) 
Completed 500 Internal Server Error in 163ms (ActiveRecord: 1.4ms) 



ActionView::Template::Error (wrong number of arguments (given 0, expected 1..2)): 
    1: insert_tag renderer_for(:edit) 
+0

Gibt es weitere Fehler im Protokoll vor dem 'ActionView :: Template :: Error'? – jdgray

+0

@jdgray Ich fügte hinzu, was in der Konsole zu der Frage angezeigt wurde. –

Antwort

2

Ich sehe ein paar Änderungen, die mit dem Formular vorgenommen werden müßten.

Es sieht derzeit wie:

form html: { enctype: 'multipart/form-data' } do |f| 
    f.input do 
    f.input :name 
    f.input :content 
    f.input :price 
    f.input :image, hint: f.project.image? ? image_tag(project.image.url, height: '100') : content_tag(:span, 'Upload JPG/PNG/GIF Image') 
    end 
    f.actions 
end 

Und es sollte wie aussehen:

form html: { enctype: 'multipart/form-data' } do |f| 
    f.inputs do 
    f.input :name 
    f.input :content 
    f.input :price 
    f.input :image, hint: resource.project.image? ? image_tag(project.image.url, height: '100') : content_tag(:span, 'Upload JPG/PNG/GIF Image') 
    end 
    f.actions 
end 

Zwei kleinere Änderungen, die vorgenommen wurden. Geändert von input zu inputs, erhalten Sie dies, nachdem Sie die Dokumentation von ActiveAdmin über forms angesehen haben. Als nächstes änderte ich f.project.image? zu resource.project.image?. resource entspricht Ihrem Project Objekt.

+0

Das Ändern von 'f.input' in' f.inputs' machte den Trick. Vielen Dank. –