Rails - f.file_field说“选择并提交后没有选择的文件”

时间:2011-10-23 21:44:18

标签: ruby-on-rails paperclip

我只是按照railscast 134将paperclip安装到我的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 :(得分:0)

非常确定file_field的正常行为,它只在您选择上传时显示文件名,它不会显示保存在数据库中的现有文件。

如果您想显示和访问上传的内容,请在您的视图中尝试以下内容:

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

希望这有帮助