有人请向我解释如何将音频文件作为附件(特别是mp3文件)上传到我的导轨应用程序中使用回形针的模型?Rails:用回形针上传音频文件(mp3),我错过了什么?
我一直在尝试年龄和迄今没有运气(即时疯狂)。
我的Rails应用程序只有一个模型称为磁道(其非常基本的),我安装了回形针创业板,并添加该代码到我的轨道模型,
has_attached_file :mp3
validates_attachment_content_type :mp3, :content_type => { :content_type => ["audio/mpeg", "audio/mp3"] }, :file_name => { :matches => [/mp3\Z/]}
然后我允许的参数在我的控制器,如所以:
private
def track_params
params.require(:track).permit(:title, :description, :mp3)
end
然后我把它添加到我的_form.html.erb,像这样:
<%= simple_form_for @track do |f| %>
<%= f.input :title %>
<%= f.input :description %>
<%= f.file_field :mp3 %>
<%= f.button :submit %>
<% end %>
现在每当我尝试提交表单时,它都不会保存,只会再次呈现表单。
有人可以告诉我我失踪了吗?
非常感谢,
蚂蚁
(以下全控制器代码)
class TracksController < ApplicationController
before_action :find_track, only: [:show, :edit, :update, :destroy]
def index
@tracks = Track.all.order("created_at DESC")
end
def show
end
def new
@track = Track.new
end
def create
@track = Track.new(track_params)
if @track.save
redirect_to root_path
else
render 'new'
end
end
def edit
end
def update
if @track.update(track_params)
redirect_to root_path
else
render 'edit'
end
end
def destroy
@track.destroy
redirect_to root_path
end
private
def track_params
params.require(:track).permit(:title, :description, :mp3)
end
def find_track
@track = Track.find(params[:id])
end
end
这里是轨道服务器代码时,从创建一个新的轨道,以提交表单..
Started GET "/tracks/new" for 127.0.0.1 at 2017-09-18 12:51:19 +0200
Processing by TracksController#new as HTML
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 14], ["LIMIT", 1]]
Genre Load (0.2ms) SELECT "genres".* FROM "genres"
Rendering tracks/new.html.erb within layouts/application
Rendered tracks/_form.html.erb (7.3ms)
Rendered tracks/new.html.erb within layouts/application (12.0ms)
Completed 200 OK in 91ms (Views: 82.6ms | ActiveRecord: 0.6ms)
Started POST "/tracks" for 127.0.0.1 at 2017-09-18 12:51:58 +0200
Processing by TracksController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"kbvYCPTwS1WdI4lK3xLsnNKkrxJFo+y3mmJUIrhr5ceWjYQyjfqsVUNllQC1Ih13erBOi7VFFtNfjFuyPyhDlg==", "track"=>{"title"=>"Hello Sunshine", "description"=>"Track for Acoustic Style Videos", "price"=>"1.99", "audio"=>#<ActionDispatch::Http::UploadedFile:0x007feb1b300670 @tempfile=#<Tempfile:/var/folders/nn/k15ytbks3n30bk74txp8t2pc0000gn/T/RackMultipart20170918-13484-qqppq1.mp3>, @original_filename="Gravity by John Mayer.mp3", @content_type="audio/mp3", @headers="Content-Disposition: form-data; name=\"track[audio]\"; filename=\"Gravity by John Mayer.mp3\"\r\nContent-Type: audio/mp3\r\n">}, "genre_id"=>"1", "commit"=>"Create Track"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 14], ["LIMIT", 1]]
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/var/folders/nn/k15ytbks3n30bk74txp8t2pc0000gn/T/a7583642b9fdf84dddb8dba14909ce6120170918-13484-c875vy.mp3'
[paperclip] Content Type Spoof: Filename Gravity_by_John_Mayer.mp3 (audio/mpeg from Headers, ["audio/mpeg"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination.
(0.1ms) begin transaction
Genre Load (0.3ms) SELECT "genres".* FROM "genres" WHERE "genres"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/var/folders/nn/k15ytbks3n30bk74txp8t2pc0000gn/T/a7583642b9fdf84dddb8dba14909ce6120170918-13484-1xhh8so.mp3'
[paperclip] Content Type Spoof: Filename Gravity_by_John_Mayer.mp3 (audio/mpeg from Headers, ["audio/mpeg"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination.
(0.2ms) rollback transaction
Rendering tracks/new.html.erb within layouts/application
Rendered tracks/_form.html.erb (9.7ms)
Rendered tracks/new.html.erb within layouts/application (12.0ms)
Completed 500 Internal Server Error in 88ms (ActiveRecord: 0.7ms)
ActionView::Template::Error (undefined method `map' for nil:NilClass):
2: <%= simple_form_for @track do |f| %>
3: <%= f.input :title, label: "Track Name:" %>
4: <%= f.input :description %>
5: <%= select_tag(:genre_id, options_for_select(@genres), :prompt => "Select a Genre", class: "genre_select") %>
6: <%= f.input :price %>
7: <%= f.file_field :audio %>
8: <%= f.button :submit %>
app/views/tracks/_form.html.erb:5:in `block in _app_views_tracks__form_html_erb___4605380733745630_70323911562620'
app/views/tracks/_form.html.erb:2:in `_app_views_tracks__form_html_erb___4605380733745630_70323911562620'
app/views/tracks/new.html.erb:4:in `_app_views_tracks_new_html_erb___4047185287574205786_70323904027580'
app/controllers/tracks_controller.rb:34:in `create'
代码添加到您的形式'<%= @ track.errors.full_messages%>'来显示错误。 –