已经问过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
模型中的Paperclip设置附件如下:
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 }
通过以下image
将Post
添加到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
的{{1}}也运行良好:
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>
视图时,对于我之前上传过图片的帖子,我只看到允许我添加图片的字段和一条消息说&#34;没有文件选择&#34;
edit
视图使用(现在)与edit
视图相同的表单,如上所示。
如何实现以下目标:
- - - -
更新:我找到了解决上述第1项的方法,替换
new
与
<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
视图中。
我还在研究第2项和第2项。 #3并且绝对可以使用这些帮助。
- - - -
如果有必要,我很乐意分享更多代码。
有什么想法吗?
答案 0 :(得分:2)
对于#2 - 允许用户删除图片,您可能会发现此SO Issue helpful
或者,根据Paperclip's documentation,您可以简单地创建一个虚拟复选框,并在控制器的更新方法中查看是否勾选了复选框并删除文档中提到的附件。
对于#3 - 允许用户用新图像替换此图像
简单地修改您的代码如下:
<p>
<%= f.label :image %><br>
<% if @post.image.exists? %>
<%= image_tag @post.image.url(:med) %>
<% end %>
<%= f.file_field :image %>
</p>
这样,file_field始终存在(允许用户替换或添加他们的图像)