在展示页

时间:2016-04-21 11:02:06

标签: ruby-on-rails

使用Rails 4和Ruby 2.2,

我有书作为模型,应该在书的显示页面中具有图像上传功能。因此,用户可以先创建书籍,然后从显示页面上传书籍的多个图像。我使用了carrierwave作为gem,并为Image创建了单独的模型。

  

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
  

书籍/ 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

现在我有点无法继续这个,有人可以指导我这个,因为我在书籍/节目页面中有表格,我需要在成功更新图像后在同一页面上显示图像。(多个图像可以上传)

提前致谢

如果我需要提供更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

您可以使用关联本身并列出已上传的所有图像。

<%= 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 %>