gpt4 book ai didi

ruby-on-rails - rails 4 : replace/delete uploaded file in edit view form

转载 作者:行者123 更新时间:2023-12-03 19:56:04 24 4
gpt4 key购买 nike

similar question已经被问到,但答案仅适用于 Rails 3,所以我冒昧地提出一个新问题。

我有一个 Rails 4 应用程序,具有以下模型:

class User < ActiveRecord::Base
has_many :administrations
has_many :calendars, through: :administrations
end

class Calendar < ActiveRecord::Base
has_many :administrations
has_many :users, through: :administrations
has_many: :posts
end

class Administration < ActiveRecord::Base
belongs_to :user
belongs_to :calendar
end

class Post < ActiveRecord::Base
belongs_to :calendar
end
Post模型具有以下属性:
references :calendar, index: true, foreign_key: true
date :date
time :time
string :subject
string :format
text :copy
attachment :image

附件设置如下,回形针在 Post模型:
has_attached_file :image, styles: { small: "64x64", med: "100x100", large: "200x200" }
validates_attachment :image, :content_type => { :content_type => "image/png" },
:size => { :in => 0..3000.kilobytes }

添加 imagePost工作正常,通过以下 form :
<%= form_for [@calendar, @calendar.posts.build] do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

<ul>
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<p>
<%= f.label :date %><br>
<%= f.date_select :date %>
</p>
<p>
<%= f.label :time %><br>
<%= f.time_select :time %>
</p>
<p>
<%= f.label :subject %><br>
<%= f.text_field :subject %>
</p>
<p>
<%= f.label :format %><br>
<%= f.text_field :format %>
</p>
<p>
<%= f.label :copy %><br>
<%= f.text_area :copy %>
</p>
<p>
<%= f.label :image %><br>
<%= f.file_field :image %>
</p>
</div>

<div class="actions">
<%= f.submit %>
</div>
<% end %>

查看 image附在 Post也运行良好,多亏了这个 show看法:
<h2>Post from <%= @post.date.strftime("%A, %d") %></h2>

<div>
<p><strong>Date</strong></p>
<%= @post.date.strftime("%A, %d") %>
</div>
<div>
<p><strong>Time</strong></p>
<%= @post.time.strftime("%I:%M %p") %>
</div>
<div>
<p><strong>Subject</strong></p>
<%= @post.subject %>
</div>
<div>
<p><strong>Format</strong></p>
<%= @post.format %>
</div>
<div>
<p><strong>Copy</strong></p>
<%= @post.copy %>
</div>
<div>
<p><strong>Image</strong></p>
<%= image_tag @post.image.url(:med) %>
</div>

然而,当我去 edit查看,对于我之前上传过图片的帖子,我只看到允许我添加图片的字段和一条消息“未选择文件”。
edit View 使用(目前)与 new 相同的形式查看,如上图。

我怎样才能实现以下目标:
  • 让上传的图片出现在编辑页面中。
  • 允许用户删除此图像。
  • 允许用户用新图像替换此图像。

  • ————————

    更新 :我找到了解决上面第 1 项的方法,通过替换
    <p>
    <%= f.label :image %><br>
    <%= f.file_field :image %>
    </p>


    <p>
    <%= f.label :image %><br>
    <% if @post.image.exists? %>
    <%= image_tag @post.image.url(:med) %>
    <% else %>
    <%= f.file_field :image %>
    <% end %>
    </p>

    在我的 Post edit看法。

    我仍在处理第 2 项和第 3 项,并且肯定可以使用这些帮助。

    ————————

    如有必要,我很乐意分享更多代码。

    任何的想法?

    最佳答案

    对于 #2 - 允许用户删除图像,您可能会发现此 SO Issue helpful

    或者,根据 Paperclip's documentation您可以简单地创建一个虚拟复选框,并在 Controller 的更新方法中,查看复选框是否已被勾选并删除文档中提到的附件。

    对于 #3 - 允许用户用新图像替换此图像

    只需按如下方式重新编写代码:

    <p>
    <%= f.label :image %><br>
    <% if @post.image.exists? %>
    <%= image_tag @post.image.url(:med) %>
    <% end %>
    <%= f.file_field :image %>
    </p>

    这样,file_field 始终存在(允许用户替换或添加他们的图像)

    关于ruby-on-rails - rails 4 : replace/delete uploaded file in edit view form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32912027/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com