Carrierwave问题 - 文件没有显示?

时间:2011-08-18 16:07:27

标签: ruby-on-rails ruby ruby-on-rails-3 carrierwave

<% @company.comments.each do |comment| %>
  <tr>
    <td><%= comment.commenter %></td>
    <td><%= comment.body %></td>
    <td><%= time_ago_in_words(comment.created_at, "Comment") %> ago</td>
    <td><%= comment.commentfile %></td>
  </tr>
<% end %>

我正在尝试从下面的表单中显示上传的文件:

<h2>Add a comment:</h2>
<%= form_for([@company, @company.comments.build]) do |f| %>
  <div class="hidden">
    Name:<br />
    <%= f.text_field :commenter, :value => current_user.full_name, :readonly => "readonly" %>
  </div>
  <div class="field">
    Comment:<br />
    <%= f.text_area :body %>
  </div>
  <div class="field">
    <%= f.file_field :commentfile %>  
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

但我不知道该文件是否正在保存,因为当我检查我的公共/上传文件夹时,没有文件出现。在<%= comment.commentfile %>的视图中,我得到了我上传的文件的名称,但不知道文件在哪里或者我如何链接到它或文件是否甚至上传?开始认为它只是插入一个字符串。我的模型如下。

class Comment < ActiveRecord::Base
  belongs_to :contact
  belongs_to :company
  mount_uploader :commentfile, CommentFileUploader
end

和comment_file_uploader.rb

class CommentFileUploader < CarrierWave::Uploader::Base

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

请帮忙!

还要注意我是否

u = Comment.new
u.commentfile = params[:file]

在控制台中我得到

NameError: undefined local variable or method `params' for main:Object

迁移添加:commentfile

class CreateUploader < ActiveRecord::Migration
  def self.up
    add_column :comments, :commentfile, :string
  end

  def self.down
  end
end

1 个答案:

答案 0 :(得分:1)

浏览器必须使用特殊格式发布带有表单数据的上传文件数据。您需要将表单设为multipart。

<%= form_for( [@company, @company.comments.build],
              :html => { :multipart => true } ) do |f| %>

这会将属性enctype =“multipart / form-data”添加到生成的HTML中,然后浏览器应该能够在邮件的单独部分中发送上传的文件。

如果你使用Firebug或类似的方法检查帖子数据,你会发现如果没有启用多部分编码,浏览器就不会发送文件数据。