[Ruby on Rails] refile을 통해 여러 이미지 업로드

9722 단어 RubyRefileRails

목표



개발 환경


ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

전제 조건


※ ▶◯◯을 선택하면 설명 등이 나온다
잘 모르는 상황의 참고가 되었으면 좋겠습니다.
전제는 발언 기능을 실현할 수 있다는 것이다.
※ 참조로그인한 사용자만 수행할 수 있는 발언 기능

물줄기


1gem 도입
두 테이블 작성
3model 편집
편집 4controller
5 뷰 편집
※ 보충[Ruby on Rails] refile의 투고 이미지 미리 보기 기능

영입


Gemfile
gem 'refile', require: 'refile/rails', github: 'refile/refile'
gem 'refile-mini_magick'
단말기
$ bundle install

테이블 작성


이번에는 포즈 모델과 포즈.이미지 모델을 작성합니다.
각 열은 아래와 같다.
db/schema.rb
 create_table "post_images", force: :cascade do |t|
    t.integer "post_id", null: false
    t.string "image_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["post_id"], name: "index_post_images_on_post_id"
  end

  create_table "posts", force: :cascade do |t|
    t.string "title", null: false
    t.string "content", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

모델 편집


app/models.post.rb
class Post < ApplicationRecord
  has_many :post_images, dependent: :destroy
  accepts_attachments_for :post_images, attachment: :image
end
app/models.post_image.rb
class PostImage < ApplicationRecord
  belongs_to :post
  attachment :image
end

controller 편집


app/controllers/posts_controller.rb
class Admins::PostsController < ApplicationController

...

  private
  def post_params
    params.require(:post).permit(:title, :content, post_images_images: [])
  end
end
보충[post images images:[]]
여러 이미지 id가 되기 위해 []로 배열하여 전달합니다.

편집view(새 발언)


<%= f.attachment_field :post_images_images, multiple: true %>
여기 멀티플: 사진 쓰는 거 잊지 마세요.
이것은 여러 개의 이미지 투고에 필요한 것이다.
app/views/posts/new.html.erb
<%= form_for(@post, url: posts_path) do |f| %>
  <table>
    <tbody>
      <tr>
        <td>画像</td>
        <td><%= f.attachment_field :post_images_images, multiple: true %></td>
      </tr>
      <tr>
        <td>タイトル</td>
        <td><%= f.text_field :title, autofocus: true %></td>
      </tr>
      <tr>
        <td>内容</td>
        <td><%= f.text_area :content %></td>
      </tr>
      <tr>
        <td></td>
        <td><%= f.submit "追加", class: "btn btn-primary" %></td>
      </tr>
    </tbody>
  </table>
<% end %>

편집view(발언 상세)


여러 개의 그림이기 때문에 each 문장이 필요합니다.
첫 장만 보여주고 싶으면...
<% @post.post_images.first(1).each do |image| %>
그럼 돼.
app/views/posts/show.html.erb
<% if @post.post_images.present? %>
  <% @post.post_images.each do |image| %>
    <%= attachment_image_tag image, :image, class: "default_image" %>
  <% end %>
<% else %>
  画像はありません。
<% end %>

투고 방법


여러 이미지를 업로드하려면 [파일 선택]을 선택한 후
[shift+] 또는 [ctrl+]를 클릭하여 이미지 선택
올려주세요.

참고 자료

좋은 웹페이지 즐겨찾기