音声ファイルの投稿〜再生・ダウンロードまでを実装します。
#手順
##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 %>
これで完成です。