前提・実現したいこと
Railsで複数画像投稿機能の実装をしたのですが、画像投稿枚数に制限をかけたいです。
該当のソースコード
js
1document.addEventListener('DOMContentLoaded', function(){ 2 if ( document.getElementById('item-image')){ 3 const ImageList = document.getElementById('image-list'); 4 5 const createImageHTML = (blob) => { 6 // 画像を表示するためのdiv要素を生成 7 const imageElement = document.createElement('div'); 8 imageElement.setAttribute('class', "image-element") 9 let imageElementNum = document.querySelectorAll('.image-element').length 10 11 // 表示する画像を生成 12 const blobImage = document.createElement('img'); 13 blobImage.className="img-preview"; 14 blobImage.setAttribute('src', blob); 15 16 // ファイル選択ボタンを生成 17 const inputHTML = document.createElement('input') 18 inputHTML.setAttribute('id', `item-image_${imageElementNum}`) 19 inputHTML.setAttribute('name', 'post[images][]') 20 inputHTML.setAttribute('type', 'file') 21 22 // 生成したHTMLの要素をブラウザに表示させる 23 imageElement.appendChild(blobImage); 24 imageElement.appendChild(inputHTML) 25 ImageList.appendChild(imageElement); 26 27 inputHTML.addEventListener('change', (e) => { 28 file = e.target.files[0]; 29 blob = window.URL.createObjectURL(file); 30 31 createImageHTML(blob) 32 }) 33 } 34 35 document.getElementById('item-image').addEventListener('change', function(e){ 36 const file = e.target.files[0]; 37 const blob = window.URL.createObjectURL(file); 38 39 createImageHTML(blob); 40 }); 41 } 42});
html
1<div class="post-form"> 2 <div class="post-container"> 3 <%= form_with(model: @post, local: true) do |f| %> 4 <h3>sample</h3> 5 <div class ="post-title"> 6 <%= f.text_field :title,class:"post-title-form", placeholder: "title" %> 7 </div> 8 <div class ="post-image"> 9 <%= f.file_field :images, multiple: true, name: 'post[images][]', class:"post-image-form", id:"item-image" %> 10 </div> 11 <div class="preview" id="image-list"> 12 13 </div> 14 <div class = "post-text"> 15 <%= f.text_area :text,class:"post-text-form", placeholder: "text", rows: "10" %> 16 </div> 17 <div class = "post-prefecture"> 18 <%= f.collection_select(:prefecture_id, Prefecture.all, :id, :name, {}, {class:"post-select-box", id:"post-prefecture"}) %> 19 </div> 20 <%= f.submit "SEND", class:"post-white-btn" %> 21 <% end %> 22 </div> 23</div>
###Postコントローラー
ruby
1class PostsController < ApplicationController 2 before_action :authenticate_user! 3 4 def index 5 @posts = Post.order("created_at DESC").limit(5) 6 end 7 8 def new 9 @post = Post.new 10 end 11 12 def create 13 @post = Post.create(post_params) 14 if @post.save 15 redirect_to root_path 16 else 17 render :new 18 end 19 end 20 21 def show 22 @post = Post.find(params[:id]) 23 @comment = Comment.new 24 @comments = @post.comments.includes(:user) 25 end 26 27 def edit 28 @post = Post.find(params[:id]) 29 end 30 31 def update 32 post = Post.find(params[:id]) 33 post.update(post_params) 34 if post.save 35 redirect_to root_path 36 end 37 end 38 39 def destroy 40 post = Post.find(params[:id]) 41 post.destroy 42 if post.destroy 43 redirect_to root_path 44 end 45 end 46 47 def prefecture 48 @post = Post.find_by(prefecture_id: params[:id]) 49 @posts = Post.where(prefecture_id: params[:id]).order('created_at DESC') 50 end 51 52 53 private 54 def post_params 55 params.require(:post).permit(:title, :text, :prefecture_id, images: []).merge(user_id: current_user.id) 56 end
###Postモデル
ruby
1class Post < ApplicationRecord 2 validates :title, presence: true 3 validates :text, presence: true 4 validates :prefecture_id, numericality: { other_than: 1 , message: "can't be blank"} 5 validates :images, presence: true 6 7 belongs_to :user 8 has_many :comments 9 has_many :likes, dependent: :destroy 10 has_many :liking_users, through: :likes, source: :user 11 has_many_attached :images 12 extend ActiveHash::Associations::ActiveRecordExtensions 13 belongs_to :prefecture 14end
試したこと
https://qiita.com/tochisuke221/items/bff7d930ae282552ef77
この記事を参考に実装を試みたのですが、
うまく実装ができませんでした。
補足情報(FW/ツールのバージョンなど)
学習を始めたばかりで、初歩的な質問になってしまいますが、
教えていただけると幸いです。。。
追記するものなどあれば対応いたします。
回答1件
あなたの回答
tips
プレビュー