表示上传的文件以编辑形式出现 - paperclip

时间:2014-09-06 17:20:42

标签: ruby-on-rails-4 paperclip nested-forms

在我目前的解决方案中,我可以在edit表单中放置一个复选框,以便用户可以删除附件。但是,没有指示用户已经上传文件,该文件的名称等,以便他可以决定是否删除。

现在表格看起来像这样。第一个material是现有的,接下来的3个是

  def edit
    @post = Post.find(params[:id])
    3.times { @post.post_materials.new }
  end

正如您所看到的,很难区分它们。理想情况下,我希望以某种方式显示第一个材料文件名。

http://i.imgur.com/9IgwbV2.png

<%= form_for @post, :html => { :multipart => true } do |f| %>

  <%= f.label :title %>
  <%= f.text_field :title %>

  Materials:
  <ul>
    <%= f.fields_for :materials, :html => { :multipart => true } do |materials_form| %>
      <li>
        <%= materials_form.label :asset %>
        <%= materials_form.file_field :asset %>

        <%= materials_form.label :_destroy, class: "checkbox inline" do %>
          Remove attachment <%= materials_form.check_box :_destroy %>
        <% end %>
      </li>
    <% end %>
  </ul>
  <%= f.submit "Submit", class: "btn btn-large" %>
<% end %>

1 个答案:

答案 0 :(得分:2)

运行回形针generator会创建一个迁移,在您的模型上添加4个属性,您可以看到here。这些属性是:

<attachment>_file_name
<attachment>_file_size
<attachment>_content_type
<attachment>_updated_at

所以,如果您以这种方式运行生成器:rails generate paperclip post_material asset,在PostMaterial模型上,您将拥有以下属性:

asset_file_name
asset_file_size
asset_content_type
asset_updated_at

然后,在您的代码上,您可以执行以下操作:

if materials_form.object.asset.exists? #object represents the current post_material instance
  #show a label with object.asset_file_name
else
  #render materials_form.file_field :asset
end