Rails でアプリを作成しようとしています。これは、オーディオ ファイルのアップロードを取得し、それらからメタデータを読み取ってデータベースに入力します。Taglib-ruby gem を使用して、さまざまなファイル タイプを処理しています。アップロードは単独で動作しているように見えますが、Taglib はそれに与えられたファイルを null と見なします。
これが私のコントローラーです:
class UploadsController < ApplicationController
require 'taglib'
def new
end
def create
file = params[:upload]
TagLib::FileRef.open(file) do |fileref|
unless fileref.null?
tag = fileref.tag
# properties = fileref.audio_properties
@song = Song.new(title: tag.title, artist: tag.artist, album: tag.album,
year: tag.year, track: tag.track, genre: tag.genre)
if @song.save
redirect_to songs_path
else
render 'new'
end
else
raise "file was null"
end
end
end
end
フォーム送信に対する私の見解:
<h1> Upload </h1>
<%= form_tag(url: { action: :create }, html: { multipart: true }) do %>
<%= label_tag :upload, "Scan your song:" %>
<%= file_field_tag :upload, multiple: true %>
<br />
<%= submit_tag "Submit" %>
<% end %>
Taglib 自体は機能しているようです - 「require 'taglib'」を追加すると、それに関して発生していたエラーが削除され、レールの外で作成したモックアップは正常に機能しました (したがって、私が使用しているファイルも問題ではありません)。これを実行するたびに、制御フローがレイズ コマンドにヒットし、レコードが保存されません。fileref.null? true を返しています。これは、アップロード プロセスに何か問題があることを示唆していますが、何が原因かわかりません。
理想的には、複数のアップロード オプションを使用して、このプロセスを各ファイルで順番に実行したいと考えていますが、1 つのアップロードを null 以外として登録することさえできません。