【问题标题】:Rails: paperclip does not save in databaseRails:回形针不保存在数据库中
【发布时间】:2012-10-09 19:24:28
【问题描述】:

所以我只是添加了回形针并将其迁移到名为 users_pictures 的表中。 我的模型如下所示:

class UsersPicture < ActiveRecord::Base
 attr_accessible :user_id, :users_picture_file, :users_picture_id,
                 :photo_file_name, :photo_content_type, :photo_file_size
  belongs_to :users
  has_attached_file :photo,
  :url => "/images/:attachment/:basename.:extension",
  :path => ":rails_root/public/images/:attachment/:basename.:extension"
end

所以当我访问“new.html.erb”页面时,我可以在表单中添加一张图片……给它 user_id 并提交。 Rails 没有显示任何错误,日志甚至说:

Processing by UsersPicturesController#create as HTML

Parameters: {"commit"=>"Create Users picture",`
"authenticity_token"=>"0tbAZj5MKyN/uaj0ybaNsa0dZrxeS05OJNNA3ZNO8Uc=",
"users_picture"=>{"user_id"=>"12", 
"photo"=>#<ActionDispatch::Http::UploadedFile:0xe028dbd4

@content_type="image/jpeg", @tempfile=#<File:/tmp/RackMultipart20121019-14239-1edlwpp-0>, 
@headers="Content-Disposition: form-data; name=\"users_picture[photo]\"; filename=\"rh.jpeg
\"\r\nContent-Type: image/jpeg\r\n", @original_filename="rh.jpeg">}, "utf8"=>"✓"}
[paperclip] Saving attachments.
Redirected to xxxx/users_pictures/8
Completed 302 Found in 18ms (ActiveRecord: 1.2ms)

但是文件信息没有被保存到数据库中......所以我无法显示它。 Firebug 告诉我一些关于 POST 方法的参数:

authenticity_token  0tbAZj5MKyN/uaj0ybaNsa0dZrxeS05OJNNA3ZNO8Uc=
users_picture[user_id]  12
users_picture[photo]    ÿØÿà�JFIF������ÿÛ�� !"&# /!$'),,-180*5*+,) 0%"5)-,*4,,,*,),),,,,,,,,,,,,,))),,,*,),,,,),),,,)).,ÿÀ��Ì�Ì"�ÿÄ��������������ÿÄ�E� ����!1AQ"aq2#BRbr¡3²¢±ÁÑ4SÓ%Cs£ÒáÿÄ������������ÿÄ�%��������!1"A2BQq¡ÿÚ���?�Þ4¥()JJRR ¥pLªXl °ôR|¨u]Þýú

等等。 所以它不是将路径保存到数据库中,而是图片的源代码? 如您所见,我已经设置了 :url 和 :path (即使没有 :attachment 因为我不知道它是什么)

一般来说,我只是想把图片上传到某个路径;并将名称和大小等文件信息存储在我的数据库中。

我的视图文件夹中的表单如下所示:

<%= form_for(@users_picture, :html => { :multipart => true }) do |f| %>
...
 <%= f.file_field :photo %>

我不会发布show和index.html.erb,因为显示是另一回事-我首先要实现将所有数据保存在数据库中+将图片上传到某些文件夹。 有关如何正确执行此操作的任何建议?

【问题讨论】:

  • 现阶段看起来没有任何问题。你为什么说文件信息没有保存在你的数据库中? User.find(12).user_photo(或.user_photos,如果它是has_many 关系)的结果是什么?问题可能在于检索上传的文件,而不是保存它(如您所见,回形针说它正在将图像保存在您的服务器日志中)。
  • 是的,好像文件根本没有被处理。 User.find(12).users_pictures 例如 #
  • 嗯。处理表单提交的控制器操作是什么样的?
  • 另外,尝试向has_attached_file 添加一些样式。我不确定这一点,但有可能回形针甚至不会保存:original 的想象,除非你至少给它一个:style。例如,:styles =&gt; { :thumb =&gt; "100x100&gt;" }

标签: ruby-on-rails database upload paperclip


【解决方案1】:

您无需在这些子字段上设置attr_accessible。唯一需要标记为attr_accessible 的是:photo 属性:

class UsersPicture < ActiveRecord::Base
  attr_accessible :user_id, :users_picture_file, :users_picture_id, :photo

【讨论】:

  • 太神奇了,它实际上可以立即运行。非常感谢!
猜你喜欢
  • 2013-05-15
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 2016-03-30
相关资源
最近更新 更多