前提・実現したいこと
Ruby on Railsにてポートフォリオの作成中です。投稿一覧ページにてTwitterや食べログのような投稿したテキスト+画像ファイルの表示をindexにて行いたい
発生している問題・エラーメッセージ
このように投稿した画像が文字化け?の様になってしまい、投稿一覧ページで画像が表示できなくて困っています。
エラーメッセージ
該当のソースコード
「posts/index.html.erb」
<div class="posts-wrapper"> <div class="posts-container"><% @posts.each do |post| %>
<div class="posts-index-item"> <div class="post-user-name"> <div class="posts"> <div class="post-img"> <%= image_tag "/@post.image_name", alt: nil, id: "public", class: "image" %><br> </div> <%= link_to(post.content, "/posts/#{post.id}") %><br> </div> </div> </div> <% end %>該当のソースコード
[posts_controller.rb]
class PostsController < ApplicationController
before_action :authenticate_user
before_action :ensure_correct_user, {only: [:edit, :update, :destroy]}
def index
@posts = Post.page(params[:page]).per(5).order(created_at: :desc)
@post = Post.find_by(id: params[:id])
if params[:image]
@post.image_name = "#{@post.id}.jpg"
image = params[:image]
File.binwrite("public/images_folder/#{@post.image_name}", image.read )
else
end
end
def show
@post = Post.find_by(id: params[:id])
@user = User.find_by(id: @post.user_id)
if params[:image] @post.image_name = "#{@post.id}.jpg" image = params[:image] File.binwrite("public/post_images/#{@post.image_name}", image.read) end
end
def new
@post = Post.new
if @current_user == nil
flash[:notice] = "ログインして下さい"
redirect_to("/login")
end
end
def create
@post = Post.new(
content: params[:content],
image_name: params[:image],
user_id: @current_user.id
)
if params[:image]
@post.image_name = "#{@post.id}.jpg"
image = params[:image]
File.binwrite("public/images_folder/#{@post.image_name}", image.read)
end
if @post.save
redirect_to("/posts/index")
flash[:notice] = "投稿しました"
else
render("/posts/new")
end
end
def edit
@post = Post.find_by(id: params[:id])
end
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
if params[:image]
@post.image_name = "#{@post.id}.jpg"
image = params[:image]
File.binwrite("public/post_images/#{@post.image_name}", image:read)
end
if @post.save
redirect_to("/posts/index")
flash[:notice] = "投稿の編集をしました"
else
redirect_to("/posts/#{@post.id}/edit")
end
end
def destroy
@post = Post.find_by(id: params[:id])
@post.destroy
redirect_to("/posts/index")
flash[:notice] = "削除しました"
end
def ensure_correct_user
@post = Post.find_by(id: params[:id])
if @post.user_id != @current_user.id
flash[:notice] = "ユーザーが一致しません"
redirect_to("/posts/index")
end
end
private
def post_params
params.require(:post).permit(:title, :image)
end
end
該当のソースコード
[upload.rb]
class Upload < ApplicationRecord
mount_uploader :image, ImageUploader
end
該当のソースコード
[post.rb]
class Post < ApplicationRecord
mount_uploader :image, ImageUploader
end
該当のソースコード
[Gemfile]
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.6.3'
gem 'rails-i18n'
Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '> 6.0.1'> 1.4'
Use sqlite3 as the database for Active Record
gem 'sqlite3', '
Use Puma as the app server
gem 'puma', '> 4.1'> 4.0'
Use SCSS for stylesheets
gem 'sass-rails', '>= 6'
Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker', '
Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '> 5'> 2.7'
Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '
Use Redis adapter to run Action Cable in production
gem 'redis', '> 4.0'> 3.1.7'
Use Active Model has_secure_password
gem 'bcrypt', '
Use Active Storage variant
gem 'image_processing', '~> 1.2'
Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.2', require: false
group :development, :test do
Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
group :development do
Access an interactive console on exception pages or by calling 'console' anywhere in the code.
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
group :test do
Adds support for Capybara system testing and selenium driver
gem 'capybara', '>= 2.15'
gem 'selenium-webdriver'
Easy installation and use of web drivers to run system tests with browsers
gem 'webdrivers'
end
Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem "refile", github: 'refile/refile', require: "refile/rails"
gem "refile-mini_magick", github: 'refile/refile-mini_magick'
gem 'kaminari'
gem 'carrierwave', '~> 2.0.2'
gem 'mini_magick'
該当のソースコード
[posts/new.html.erb]
<div class="main-posts-new"> <div class="container"> <h1 class="form-heading">本を要約してメモする</h1><br> <h4>本のタイトル・作者</h4> <%= form_tag("/posts/create", {multipart: true}) do %> <div class="form"> <div class="form-body"> <% @post.errors.full_messages.each do |message| %> <div class="form-error"> <%= message %> </div> <% end %> <textarea name="content"><%= @post.content %></textarea> <h4>画像</h4> <input name="image" type="file"> <h4>要約スペース</h4> <textarea name="content"><%= @post.content %></textarea><br> <input type="submit" value="投稿"> </div> </div> <% end %> </div> </div>Ruby on Rails
試したこと
carrierwaveを使って試しましたが、変わらず。また画像ファイルの大きさも関係があるのかと思い、念のためCSSでスペースを多くとってみたりもしました。初心者のためうまく説明ができず申し訳ありません。何かわかることがあったら教えていただけると幸いです。。。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー