Rails - f.file_field говорит «нет выбранного файла после выбора и отправки» - PullRequest
0 голосов
/ 24 октября 2011

Я просто следовал Railscast 134, чтобы установить скрепку в мое приложение rails 3.0.1. Я сделал все необходимое, но когда я выбираю файл и нажимаю «отправить» в моей форме, он перезагружает страницу и говорит «файл не выбран»

Это в моей модели событий:

 has_attached_file :photo, :styles => { :small => "150x150>" },
                    :url  => "/assets/events/:id/:style/:basename.:extension",
                    :path => ":rails_root/public/assets/events/:id/:style/:basename.:extension"

  validates_attachment_presence :photo
  validates_attachment_size :photo, :less_than => 5.megabytes
  validates_attachment_content_type :photo, :content_type => ['image/jpeg', 
                                                              'image/png', 
                                                              'image/jpg']

и моя форма:

<h1>Edit Event</h1>
<%= form_for @event, :html => { :multipart => true } do |f| %>
    <div class="actions">
        <%= f.label :name %><br />
        <%= f.text_field :name %><br /><br />
        <%= f.label :description %><br />
        <%= f.text_field :description %><br /><br />
        <%= f.label :event_date %><br />
        <%= text_field_tag :event_date, @event.event_date.try(:strftime, "%m/%d/%Y at %I:%M%p"), :size=>30 %><br /><br />
        <%= f.label :location %><br />
        <%= f.text_field :location %><br /><br />
        <%= f.file_field :photo %><br /><br />
        <%= f.submit "Update" %>
    </div>
<% end %>

не могу понять это. спасибо!

РЕДАКТИРОВАТЬ: код скрепки в моей модели события:

has_attached_file :photo, :styles => { :small => "150x150>" },
                    :url  => "/assets/events/:id/:style/:basename.:extension",
                    :path => ":rails_root/public/assets/events/:id/:style/:basename.:extension"

  validates_attachment_presence :photo
  validates_attachment_size :photo, :less_than => 5.megabytes
  validates_attachment_content_type :photo, :content_type => ['image/jpeg', 
                                                              'image/png', 
                                                              'image/jpg']

и некоторые отладочные данные:

{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"hScfg9tx/4gBOHrtg+u8MB+QeUWS1sKtlcbnzK8YmRI=", "event"=>{"name"=>"Park", "description"=>"Swimming", "location"=>"Golden Gate Park", "photo"=>#<File:/var/folders/lm/5svv8x4s4d50yhw_h05qz7mm0000gn/T/RackMultipart20111023-6938-8xsv50>}, "event_date"=>"10/10/2011 at 02:00PM", "commit"=>"Update", "action"=>"update", "controller"=>"events", "id"=>"3"}

1 Ответ

0 голосов
/ 24 октября 2011

Уверен, что это нормальное поведение для поля file_field. Оно отображает имя файла только при выборе его для загрузки, оно не отображает существующий файл, сохраненный в базе данных.

Если вы хотите отображать и получать доступ к загруженному контенту, попробуйте что-то вроде этого:

<%= link_to(image_tag(@event.photo.url(:small)), @event.photo.url) %>

Надеюсь, это поможет

...