【Rails】carrierwave 이미지 투고 기능 (메모)

목표


  • 이미지 게시 기능

  • 개발 환경


  • Rails: 6.1.3
  • ruby: 3.0.0
  • mac: os

  • 전제


  • 게시 기능 구현
  • 게시 테이블 post

  • 구현



    1. Gemfile에 carrierwave를 작성하여 설치



    Gemfile
    gem 'carrierwave'
    
    bundle install 합니다.

    터미널
    $bundle install
    

    2. post 테이블에 이미지 열 추가



    터미널
    $rails g migration AddImageToPosts image:string
    

    마이그레이션 파일이 생성됩니다.image 열이 추가되었는지 확인하고 마이그레이션합니다.
    class AddImageToPosts < ActiveRecord::Migration[6.1]
      def change
        add_column :posts, :image, :string
      end
    end
    

    터미널
    $rails db:migrate 
    

    3. 이미지 업로더 생성



    터미널
    $rails g uploader image
    
    image_uploader.rb 파일이 생성됩니다.

    4. 모델 연결


    post 모델에 이미지 업 로더를 연결합니다.

    app/models/post.rb
    class Post < ApplicationRecord
      mount_uploader :image, ImageUploader
    end
    

    5. 컨트롤러 기술


    praivatepost_paramsimage 추가.

    app/contrllers/posts_controller.erb
    private
    
    def post_params
      params.require(:post).permit(:content, :title, :image)
    end
    

    6. 뷰 설명



    이미지 게시 양식 추가.

    app/views/posts/_form.html.erb
    <%= form_with(model: @post)do |f| %>
        <div>
           <%= f.label :title, ' タイトル' %>
           <%= f.text_field :title %>
        </div>
        <div>
           <%= f.label :content, '内容' %>
           <%= f.text_field:content %>
        </div>
           <%= f.label :image, '画像' %>
           <%= f.file_field :image %> 
        <div>
           <%= f.submit '投稿'%>
        </div>
    <% end %>
    

    이미지 게시 양식이 완료되었습니다.


    이것만으로는 투고할 수 없기 때문에 image_tag 를 사용해 투고할 수 있도록 기술합니다.

    app/views/posts/show.html.erb
    <h5><画像投稿></h5>
    <p>タイトル:<%= @post.title %></p>
    <p><%= image_tag @post.image.url %></p>
    <p>内容:<%= @post.content %></p>
    

    작성했으므로 게시할 수 있어야합니다.



    이런 느낌으로 무사 투고로 할 수 있었습니다.
    이상입니다.

    참고



    참고로 한 기사입니다.
    h tps:// 퀵했다. 작은 m/k19911848/있어 MS/아 082 C4 그림 0c0103f935b1

    좋은 웹페이지 즐겨찾기