簡體   English   中英

如何允許參數給Rails控制器

[英]How to permit parameters to rails controller

我正在使用angularjs和rails。 我想在應用程序中上傳歌曲

以下是我使用angularjs上傳的歌曲的JSON數據

{
 "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中上傳。

您需要將帶有參數的哈希傳遞給create動作:

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

它還將基於原始文件名設置歌曲屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM