2015-11-05 33 views
0

我正在使用angularjs和导轨。我想在我的应用程序上传歌曲如何允许参数导轨控制器

下面

是上传歌曲的我JSON数据使用angularjs

{ 
"file"=>#<ActionDispatch::Http::UploadedFile:0x007f20ec024608 @tempfile=#<Tempfile:/tmp/RackMultipart20151106-6349-1impdro.mp3>, 
    @original_filename="01 - 2 States - Offo [DJMaza.Info].mp3", 
    @content_type="audio/mp3", 
    @headers="Content-Disposition: form-data; name=\"file\"; filename=\"01 - 2 States - Offo [DJMaza.Info].mp3\"\r\nContent-Type: audio/mp3\r\n">, 
    "event_id"=>"19" 
} 

但我没有得到正确的参数在我的控制器

class Api::V1::PlaylistsController < ApplicationController 

    def create 
    @event = Event.find(params[:event_id]) 
    @playlist = @event.playlists.create(:file) 
    redirect_to event_path(@event) 
    end 

end 

我有我的应用程序中的事件和一个事件包含许多歌曲。

,但它给了我下面的错误

ArgumentError (When assigning attributes, you must pass a hash as an argument.): 
app/controllers/api/v1/playlists_controller.rb:5:in `create' 

下面是我的角度视图和控制器

<div ng-controller="SongController"> 
    <input type="file" nv-file-select uploader="uploader"/><br/> 
    <ul> 
     <li ng-repeat="item in uploader.queue"> 
      Name: <span ng-bind="item.file.name"></span><br/> 
      <button ng-click="item.upload()">upload</button> 
     </li> 
    </ul> 
</div> 


.controller('SongController', ['$scope','FileUploader','$stateParams',function($scope, FileUploader,$stateParams) { 

    $scope.uploader = new FileUploader({url: '/events/'+$stateParams.id+'/playlists'}); 

}]); 

播放模式

class Playlist < ActiveRecord::Base 
    belongs_to :event 
    mount_uploader :file, SongUploader 
end 

播放模式

create_table "playlists", force: :cascade do |t| 
    t.string "song",  limit: 255 
    t.integer "event_id", limit: 4 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at",    null: false 
    end 

我正在使用carrierwave在rails中上传。

+0

尝试改变'@playlist = @ event.playlists .create(:file)'到'@playlist = @ event.playlists.create(params [:file])' – Pavan

回答

1

你需要用参数传递一个哈希的创建操作:

class Api::V1::PlaylistsController < ApplicationController 
    def create 
    @event = Event.find(params[:event_id]) 
    @playlist = @event.playlists.create(
     file: params[:file], 
     song: params[:original_filename] 
    ) 
    redirect_to event_path(@event) 
    end 
end 

它还将设定歌曲属性的基础上,原来的文件名

+0

我已经使用播放列表模型和播放列表编辑了我的帖子 –

+0

我纠正了一下这个例子,原始文件名作为歌曲名称 –

+0

我已经使用您的上述代码,但original_filename不起作用。这里是我的问题链接[http://stackoverflow.com/questions/33594217/how-to-use-parameters-in-rails-controller] –