我已经坚持了三个星期的问题了,虽然我每天都试着找到问题的答案,但我还没有发现任何我能够工作的东西。如果有人能帮助我,我会非常,非常感激。
我在Rails中构建了一个基本博客,允许管理员用户使用表单发布文章,其中包含使用Paperclip的图像标题text_field,body text_area和file_field。一切都非常简单易行,没有任何问题。但是,我一直在尝试更改表单以允许管理员用户上传多个图像作为新文章的一部分,但一直无法找到执行此操作的方法。
我需要一个能让我在表单中实现多个图片上传功能的解决方案。我尝试过很多宝石和许多教程,但是在没有完全破坏它的情况下无法将任何内容集成到我的应用程序中。任何人都可以帮我摆脱这个死胡同我过去三周发现自己了吗?您是否有任何明确的教程或解决方案可以帮助我克服这个问题?
非常感谢能帮助我的人。
答案 0 :(得分:1)
您的问题非常广泛,没有任何架构或任何内容,所以我会尽可能地帮助您。
如果它是博客,您可能拥有post
型号。
您可以拥有photo
模型,并引用post
模型。如果您将回形针添加到photo
模型,则可以保存多张照片。
有多种方法可以做到这一点。我想到的第一个是使用带有像cocoon这样的宝石的嵌套表格。
我想到的第二个是使用dropzone,它会使用Ajax上传照片。
答案 1 :(得分:1)
默认情况下,PaperClip允许您上传一个附件。然而,我发现解决这个问题的一个简洁方法是创建另一个模型来环绕图像。
class Article < AR::Base
has_many :images
accepts_nested_attributes_for :images
end
class Image < AR::Base
belongs_to :article
has_attached_file :filename, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates_attachment_content_type :filename, content_type: /\Aimage\/.*\Z/
end
不要忘记运行迁移来创建图像表:
rails generate model image article:references
和
rails generate paperclip image filename
然后在您的文章/表单中,您最初有上传图片的字段,您将拥有
<%= f.fields_for :images do |p| %>
<%= p.label :filename %><br>
<%= p.file_field :filename%>
<% end %>
在你的articles_controller#article_params中,除了当前的参数之外,还有params.require(:article).permit(..., images_attributes: [:filename])
之后,允许上传多个图像只需要嵌套表格的基本知识。
要在初始化ArticlesController#new
后的@article
中设置默认的file_fields数量
def new
@article = Article.new
2.times{ @article.images.build}
end
使用此设置,当您导航到new_articles路线时,您应该会看到您的文章已准备好上传2张图片。 要了解有关如何使用NestedForms做更多的更多信息,您应该看到Ryan Bates教程。 这种方法提供了一个更清晰的界面,因为其他方法,我想,需要某种黑客攻击。
如果我能够提供帮助或进一步澄清,请告诉我。