<% @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
答案 0 :(得分:1)
浏览器必须使用特殊格式发布带有表单数据的上传文件数据。您需要将表单设为multipart。
<%= form_for( [@company, @company.comments.build],
:html => { :multipart => true } ) do |f| %>
这会将属性enctype =“multipart / form-data”添加到生成的HTML中,然后浏览器应该能够在邮件的单独部分中发送上传的文件。
如果你使用Firebug或类似的方法检查帖子数据,你会发现如果没有启用多部分编码,浏览器就不会发送文件数据。