我想用我的应用程序试用Carrierwave_direct,所以我决定关注Railscast一集。 http://railscasts.com/episodes/383-uploading-to-amazon-s3
我正在使用Carrierwave进行各种上传,包括图片,视频和歌曲。现在,我只是测试视频,看看我喜欢它。现在,视频已上传到我的亚马逊桶,但文件(字符串)没有保存到我的数据库,也没有在页面上呈现。我现在就在这里......
Rails v 4.0.1
Ruby v 2.1.1
视频上传器
class VideoUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
# I haven't added any resizing or anything yet
end
视频模型(video.rb)
mount_uploader :video, VideoUploader # In the database, the column is video:string
...
...
页面上传文件,然后重定向到表单
def home
@uploader = Video.new.video
@uploader.success_action_redirect = new_video_url
end
视频控制器
def new
@video = Video.new(key: params[:key])
end
def create
@video = current_user.videos.create(video_params)
...
end
private
def video_params
params.require(:video).permit(:type, :title, :description, :video)
end
home.html.erb(视频上传是在成功将您重定向到表单的其余部分之前)
<%= direct_upload_form_for @uploader do |f| %>
<p><%= f.file_field :video %></p>
<p><%= f.submit "Upload Video" %></p>
<% end %>
videos / _form.html.erb(视频表单的其余部分)
<%= form_for(@video, html: { :class => "full-form form-vertical" }) do |f| %>
<fieldset>
<%= render "shared/error_messages", object: f.object %>
<%= f.hidden_field :key %>
<div class="form-group">
<%= f.label :title %>
<%= f.text_field :title, :class => "form-control" %>
</div>
<%= f.submit %>
</fieldset>
<% end %>
我的亚马逊配置正确,所以我不会提供我的carrierwave.rb初始化文件。
重申一下,第一页上发生了什么,我将上传视频,将视频重定向到表格。如果我检查表单,我可以看到:key
具有适当的值。但是,如果我在模型上放置了状态验证器,则表单将不会提交,因为视频将为空白。如果没有验证,表单将提交,亚马逊将上传到我的桶,但(1)视频文件名/字符串将不会存储在我的数据库中,(2)它不会在页面上呈现,因为它是空的。
谢谢你看看。欢呼声。
答案 0 :(得分:0)
#video_params需要在视频控制器中允许:key。
private
def video_params
params.require(:video).permit(:type, :title, :description, :video, :key)
end
你把:key一直放下来,把它设置在#new中,用hidden_field保存,然后在强大的params上丢失它。
:key需要返回VideoUploader对象,该对象安装在Video as:video下,这是允许您的Video类接受:key属性的内容。
视频模型(video.rb)
mount_uploader :video, VideoUploader # In the database, the column is video:string
...