7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails6】初学者向け!Ruby on Railsで簡単に音声ファイルの再生とダウンロードをする方法

Posted at

音声ファイルの投稿〜再生・ダウンロードまでを実装します。

##今回のゴール
image.png

#手順

##Step0 事前準備

アプリケーションの作成

すでにアプリケーション作成途中の場合、飛ばしていただいて大丈夫です。

$ rails g scaffold tweet body:text
$ rails db:migrate

scaffoldの説明は省きますが、つまりこれで

  • tweets controller
  • tweet model
  • tweets table / bodyカラム
  • tweets controller 全てのアクションのrouting

が一気に作成することができました。

##Step1 カラムの追加

ターミナル
$ rails generate migration AddFileToTweets file:string
ターミナル
$ rails db:migrate

StrongParameterの修正

tweets_controller.rb
# 割愛

private

def tweet_params
  params.require(:tweet).permit(:body,:file) <- ここの:fileを付け加えてください!
end

##Step2 音声ファイルの投稿機能

gemの追加

Gemfile
gem 'carrierwave'
ターミナル
$ bundle install

アップローダーの作成

ターミナル
$ rails generate uploader Audiofile

Modelの修正

app/models/tweet.rb
class Tweet < ApplicationRecord
# ここから追記
  mount_uploader :file, AudiofileUploader
# ここまで追記
end

Viewの修正

new.html.erb
<%= form_for @tweet do |f| %>
 #省略
 #追記はここから
  <%= f.label :file %>
  <%= f.file_field :file , :size => 140 %>
 #追記はここまで
 #省略
  <%= f.submit "送信" %>
<% end %>

##Step3 音声ファイルの再生機能とダウンロード機能

gemの追加

Gemfile
gem 'audiojs-rails'
ターミナル
$ bundle install

audiojsの読み込み

app/javascript/packs/application.js
#省略
#以下追記
//= require audiojs

Viewの修正

index.html.erb
  <% @tweets.each do |t| %>
    <div class="tweet">
      <%= t.body %>
      #ここから追記
    <audio src= "<%= "#{t.file}" %>" controls="">
         <a src="<%= "#{t.file}" %>">ダウンロード</a>
       </audio>
    #ここまで追記
    </div>
  <% end %>

これで完成です。

7
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?