Проблема с Carrierwave - Файлы не отображаются? - PullRequest
0 голосов
/ 18 августа 2011
<% @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 Ответ

1 голос
/ 20 августа 2011

Браузер должен использовать специальный формат для публикации данных загружаемого файла вместе с данными формы. Вам нужно сделать форму составной.

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

Это добавляет атрибут enctype = "multipart / form-data" к сгенерированному HTML, и браузер затем сможет отправлять загруженный файл в отдельной части сообщения.

Если вы используете Firebug или аналогичный инструмент для проверки почтовых данных, вы увидите, что без включенной многочастной кодировки браузер просто не отправляет данные файла.

...