上傳我是很新,Ruby和Rails和我在使用carrierwave_direct上傳一些問題。我使用carrierwave_direct上傳了Ryan Bates的Railscast 383。但是,他提供的解決方案似乎不適合我。我有一個用戶模型,我使用Devise創建,我有一個上傳器來處理我的上傳。我正嘗試使用上傳器上傳視頻文件,我計劃稍後使用帶有AWS API的彈性轉碼器對其進行轉碼。這些文件正在上傳到S3,但它似乎沒有與我的數據庫中的記錄相關聯。只要我提交它們就立即上傳文件,但我需要一種方法來創建它們以及標題,說明,以及其他潛在的參數。我的if-else語句也總是重定向到我的else語句。我認爲我的問題在我的控制器中;我的路線和看法似乎工作正常,我只是堅持這一個問題。問題用CarrierWave_Direct
爲了進一步澄清:我需要用戶能夠上傳視頻,然後讓用戶輸入一個標題,描述等,然後被重定向到另一個頁面。然後我需要能夠在稍後調用時顯示該文件。
這裏是我的UploadsController:
class UploadsController < ApplicationController
before_action :authenticate_user!, only: [:create, :destroy]
before_action :current_user, only: :destroy
def index
@uploader = Upload.new.video
@uploader.success_action_redirect = new_uploads_url
end
def show
@upload = Upload.find(params[:id])
end
def new
@upload = Upload.new(key: params[:key])
end
def create
@upload = Upload.new(upload_params)
if @upload.save
redirect_to home_index_path
return
else
redirect_to uploads_index_path
end
end
def edit
end
def destroy
@upload = Upload.find(params[:id])
@upload.destroy
flash[:notice] = "Upload deleted"
redirect_to request.referrer || root_url
end
def upload_params
params.require(:upload).permit(:video, :title, :description)
end
end
這是我上傳型號:
class Upload < ActiveRecord::Base
belongs_to :user
default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
validates :description, presence: true
validates :title, presence: true, length: {maximum: 100}
validates :description, presence: true
validates :video, presence: true
mount_uploader :video, VideoUploader
after_save :enqueue_video
def enqueue_video
VideoWorker.perform_async(id, key) if key.present?
end
class VideoWorker
include Sidekiq::Worker
def perform(id, key)
upload = Upload.find(id)
upload.key = key
video.remote_video_url = upload.video.direct_fog_url(with_path: true)
upload.save!
end
end
end
我的路線:
Rails.application.routes.draw do
get '/home/index'
root 'home#index'
devise_for :users
get 'users/:id' => 'users#show'
resources :uploads
get '/index' => 'uploads#index'
end
編輯這裏是我的UsersController和用戶查看頁面也是:
控制器: 類UsersController < ApplicationController的
def show
@user = User.find(params[:id])
end
end
顯示:
<h1><%= @user.username %></h1>
<h3>Title:</h3>
<%= @upload.title %>
我懷疑是有關於'@ upload'驗證錯誤。你在某處顯示'@ upload.errors'嗎?如果不是,它的價值是什麼? – Carpetsmoker
所以,你對這些驗證是正確的。我沒有任何驗證測試,所以我只是刪除驗證,嘗試另一個文件上傳,然後重定向工作。但是,當我嘗試訪問@upload時,它並未顯示在用戶顯示頁面上。記錄的信息是否未被放入我的數據庫中?或者它可能是別的東西? –
很難說;如果'@ upload.save'返回'true',那麼它可能被保存到數據庫中。通過使用'rails console'上的'Upload.last'來確保它實際上*是*。記錄可能在數據庫中,但是因爲您刪除了所有驗證,所以'user_id'缺失。刪除驗證不是一個修復,看看錯誤是什麼,修復*這是修復:-)你也可能在控制器渲染顯示或視圖代碼時出現錯誤。 – Carpetsmoker