0

Mit Rails 4 und Ruby 2.2,Hochladen von Bildern in Show-Seite mit carrierwave

Ich habe Buch als Modell, das Hochladen von Bildern Funktionalität in der Show Seite des Buchs haben sollte. So kann der Benutzer das Buch zuerst erstellen und von der Wiedergabeseite die Bilder für das Buch hochladen. Ich habe Carrierwave als Juwel benutzt und habe ein separates Modell für Image erstellt.

image.rb

class Image < ActiveRecord::Base 
    belongs_to :book 

    mount_uploader :avatar, AvatarUploader 
end 

book.rb

class Book < ActiveRecord::Base 
    belongs_to :subject, dependent: :destroy 
    belongs_to :user, dependent: :destroy 
    has_many :images, dependent: :destroy 
end 

Bücher/show.html.erb

<%= form_for(Image.new, :html => { :multipart => true }) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    <%= hidden_field_tag "image[book_id]", @book.id %> 
    </div> 
    <%= f.fields_for :images do |p| %> 
    <div class="field"> 
     <%= p.label :avatar %><br> 
     <%= p.file_field :avatar, :multiple => true, name: "images[avatar]" %> 
    </div> 
    <%end%> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

schema.rb

create_table "images", force: :cascade do |t| 
    t.datetime "avatar_updated_at" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    t.integer "book_id",   limit: 4 
    t.string "avatar",   limit: 255 
    t.string "name",    limit: 255 
    end 

    create_table "books", force: :cascade do |t| 
    t.string "title",  limit: 255 
    t.integer "page_number", limit: 4 
    t.text  "description", limit: 65535 
    t.datetime "created_at",        null: false 
    t.datetime "updated_at",        null: false 
    t.integer "user_id",  limit: 4 
    t.integer "subject_id", limit: 4 
    t.boolean "active",     default: false 
    end 

Jetzt bin ich irgendwie nicht mehr mit diesem gehen, kann mir jemand führen auf dieser, weil ich mit Form bin in Bücher/show Seite und ich brauche das Bild auf der gleichen Seite nach erfolgreicher updation der Bilder zu zeigen. (Mehrere Bilder hochgeladen werden können)

mich

Vielen Dank im Voraus

lassen wissen, ob ich weitere Informationen zur Verfügung stellen muss.

Antwort

0

Sie können die Verknüpfung selbst verwenden und alle Bilder auflisten, die hochgeladen wurden.

<%= form_for(Image.new, :html => { :multipart => true }) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    <%= hidden_field_tag "image[book_id]", @book.id %> 
    </div> 
    <%= f.fields_for :images do |p| %> 
    <div class="field"> 
     <%= p.label :avatar %><br> 
     <%= p.file_field :avatar, :multiple => true, name: "images[avatar]" %> 
    </div> 
    <% end %> 
    <!-- Listing all the images for a book --> 
    <% if @book.images.any? %> 
     <% @book.images.each do |img| %> 
     <%= image_tag(img.avatar.url) %> 
     <% end %> 
    <% end %> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %>