无法使用Carrierwave_direct获取要保存到数据库的文件

时间:2014-03-09 21:37:21

标签: ruby-on-rails ruby-on-rails-4 amazon-s3 carrierwave

我想用我的应用程序试用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)它不会在页面上呈现,因为它是空的。

谢谢你看看。欢呼声。

1 个答案:

答案 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
...