开发者

Carrierwave Problem - Files not showing?

<% @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 %>

Is where i am trying to display the uploaded file from the form below:

<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 %>

but I don't know whether the file is being saved beacause when i check my public/uploads folder no files appear. And in the view at <%= comment.commentfile %> I get the name of the file i uploaded but no idea where the file is or how i can link to it or whether the file even uploaded at all? starting to think it just inserted a string. My model below.

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

and comment_file_uploader.rb

class CommentFileUploader < CarrierWave::Uploader::Bas开发者_如何学编程e

  storage :file

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

Please help!

Also to note if i do

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

in console i get

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

The migration adding :commentfile

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

  def self.down
  end
end


The browser has to use a special format to post the upload file data with the form data. You need to make the form multipart.

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

This adds the attribute enctype="multipart/form-data" to the generated HTML, and the browser should then be able to send the uploaded file in a separate part of the message.

If you use Firebug or similar to examine the post data, you'll see that without the multipart encoding enabled, the browser just doesn't send the file data.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜