加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 回形针输入和编辑操作中上传图像的预览

发布时间:2020-12-17 02:41:03 所属栏目:百科 来源:网络整理
导读:我正在使用paperclip和rails 4,并且多个图像上传工作正常.但是,我想将其配置为允许上传最多3张图片,并仅显示上传图片的输入和预览. 如果我从3个可能的图像上传图像..然后转到编辑动作..它仍然显示3个上传输入元素而不是2.并且所有人都说“没有选择文件”这对
我正在使用paperclip和rails 4,并且多个图像上传工作正常.但是,我想将其配置为允许上传最多3张图片,并仅显示上传图片的输入和预览.

如果我从3个可能的图像上传图像..然后转到编辑动作..它仍然显示3个上传输入元素而不是2.并且所有人都说“没有选择文件”这对用户不利.用户可能会在考虑添加新图像时替换图像.

如何修改我的编辑操作或我的表单,以便对于已填充的资源,选择文件输入实际上显示上传的文件名而不是在先前已上载图像时选择的无文件或根本不显示输入元素?

我的表单字段:

<%= f.fields_for :assets do |builder| %>
    <% unless builder.object.new_record? %>
         <p>Images</p>
       <%=link_to image_tag(builder.object.attachment.url(:thumb)),builder.object.attachment.url(:original) %>
      Delete: <%= builder.check_box :_destroy %>
    <% end %>
   <% end %>

我的控制器动作:

def new
    @post = Post.new
    3.times { @post.assets.build }
...
    end
  end


  def edit
    @post = Post.find(params[:id])  
    if @post.assets.count < 3
      3.times { @post.assets.build }
    end
  end

模型:

class Asset < ActiveRecord::Base

 belongs_to :post
 #attr_accessible :attachment
 has_attached_file :attachment,:styles => { :medium => "600x600>",:small => "200x200>",:thumb => "100x100>" },:default_url => "no_image_fr_:style.png"
 validates_attachment_content_type :attachment,:content_type => %w(image/jpeg image/jpg image/png)
end

资产表的属性

class Asset < ActiveRecord::Base {
                         :id => :integer,:post_id => :integer,:created_at => :datetime,:updated_at => :datetime,:attachment_file_name => :string,:attachment_content_type => :string,:attachment_file_size => :integer,:attachment_updated_at => :datetime
}

编辑

所以看起来(3 – @ assets.count).times {@ assets.build}确实构建了正确数量的资产,但它仍然显示3个输入元素,无论如何.

是什么原因导致

<%= f.fields_for :assets do |builder| %>
   <%= builder.input :attachment,as: :file,:label => "Image:",wrapper: :horizontal_file_input  %>
<% end %>

始终显示3个输入,即使assets.count = 1 ??

解决方法

拒绝未使用的file_fields:

# model
has_attached_file :attachment,:styles => {
                       :medium => "600x600>",:default_url => "no_image_fr_:style.png",:reject_if => lambda { |t| t['attachment'].nil? }

更新您的编辑操作,以便仅显示剩余的文件字段数

# controller
def edit
  @post = Post.find(params[:id])  
  @assets = @post.assets
  (3 - @assets.count).times { @assets.build }
end

显示已上传的图像和所需的file_fields.

<%= f.fields_for :assets do |builder| %>
  <%= builder.file_field :attachment %>
<% end %>

<p>Images</p>
<% @assets.each do |a| %>
  <%= link_to image_tag(a.attachment.url(:thumb)),a.attachment.url(:original) %>
  Delete: <%= check_box_tag :_destroy %>
<% end %>

清理资产表后测试它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读