在我目前的解决方案中,我可以在edit
表单中放置一个复选框,以便用户可以删除附件。但是,没有指示用户已经上传文件,该文件的名称等,以便他可以决定是否删除。
现在表格看起来像这样。第一个material
是现有的,接下来的3个是
def edit
@post = Post.find(params[:id])
3.times { @post.post_materials.new }
end
正如您所看到的,很难区分它们。理想情况下,我希望以某种方式显示第一个材料文件名。
<%= 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 %>
答案 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