回形针不能保存附件



我是Rails和web开发的新手…

我已经创建了一个用户模型,我现在试图给用户添加一个个人资料图片的能力,使用回形针。

从我的用户显示页面,用户可以点击链接打开一个"编辑"页面,从中他可以看到一个表单来浏览和选择要上传的图像。当点击按钮时,它调用'update'动作并重定向到用户显示页面,但图像不会保存在任何文件夹中,并且图像属性(filename, contenttype, filesize)在数据库中仍然设置为NIL。

    我已经安装并测试了ImageMagick
  • 我在
  • 表格中添加了:multipart => true
  • 我已经把attr_accessible:avatar
  • 我已经设置了回形针选项来查找'/usr/bin/',其中convert位于
  • 我已经运行迁移
  • 设置:url和:path

-在控制器中,我的更新动作是:

def update
  @user = User.find(params[:id])
  @title = "Update profile picture"
  response_to do |format|
  if @user.update_attributes(params[:user])
    format.html {redirect_to(@user, :notice => 'Profile picture loaded')}
  else
    format.html {render :action => "edit", :notice => 'Unable to load pic")}
  end
  end
 end
我的模型代码是:
class User < ActiveRecord::Base
  attr_accessor :password
  attr_accessible :name, :email, :number_of_positive_reco, :confidence_percent, :password,
                  :password_confirmation, :avatar, :avatar_file_name, :avatar_content_file, :avatar_file_size
  has_attached_file :avatar , :styles => { :medium => "300x300>", :thumb => "100x100>"},
                    :url => "/images/profiles/:attachment/:id_:style.:extension",
                    :path => ":rails_root/public/images/profiles/:attachment/:id_:style.:extension"
                   # :default_url => "/images/Default_profile_picture.png"
  email_regex = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
  validates :name, :presence => true,
  :length => { :maximum => 20}
  validates :email, :presence => true,
  :format => { :with => email_regex},
  :uniqueness => {:case_sensitive => false}
  validates :password, :presence => true,
  :confirmation => true,
  :length => { :within => 6..40 }
  validates :number_of_positive_reco, :numericality => {:only_integer => true, :greater_than_or_equal_to => 0}
  validates :confidence_percent, :numericality => { :greater_than_or_equal_to => 0.0, :less_than_or_equal_to => 1.0}
  before_save :encrypt_password
  # Return true if the user's password matches the submitted password.
  def has_password?(submitted_password)
    encrypted_password == encrypt(submitted_password)
  end
  def self.authenticate(email, submitted_password)
    user = find_by_email(email)
    return nil if user.nil?
    return user if user.has_password?(submitted_password)
  end
  def self.authenticate_with_salt(id, cookie_salt)
    user = find_by_id(id)
    (user && user.salt == cookie_salt) ? user : nil
  end
  private
  def encrypt_password
    self.salt = make_salt if new_record?
    self.encrypted_password = encrypt(password)
  end
  def encrypt(string)
    secure_hash("#{salt}--#{string}")
  end
  def make_salt
    secure_hash("#{Time.now.utc}--#{password}")
  end
  def secure_hash(string)
    Digest::SHA2.hexdigest(string)
  end
end

表单位于edit.html.erb:

<h1>
    Ajouter une photo au profil
</h1>
<%= form_for @user, :html => { :multipart => true} do |f| %>
<div class="field">  
  <%= f.label :avatar, "Upload ta photo" %>
  <br />
  <%= f.file_field :avatar %>
</div>
<div class="actions">
    <%= f.submit "Upload" %>
</div>
<% end %>

并将调试信息打印到浏览器中。点击上传后,我得到了这个:

{"commit"=>"Upload", "authenticity_token"=>"+ExcuQOSv1bxIyAoM5+N4TCSmYI8JYeh5Yb8P5W4VU0=", "_method"=>"put", "utf8"=>"✓", "action"=>"update", "id"=>"8", "controller"=>"users", "user"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0xb6d63fec @content_type="image/jpeg", @original_filename="Paperclip-Railway.jpg", @tempfile=#<File:/tmp/RackMultipart20111208-1681-3h3ps4-0>, @headers="Content-Disposition: form-data; name="user[avatar]"; filename="Paperclip-Railway.jpg"rnContent-Type: image/jpegrn">}}

所以,在日志中,我看到'回形针的字段'填充了图像名称,图像类型等…但是没有"INSERT into TABLE",所有用户字段仍然是NIL,应该存储用户图像的系统目录没有创建,没有"回形针附件保存",也没有在日志中提到回形针…

在控制台模式下,我可以创建一个新用户,将头像属性设置为:

的用户。create(:avatar => File.new(Rails。Root + "public/images/an_image.png") '

,它工作得很好!…我还测试了创建一个新文件夹,没有管理员权限,它工作得很好…我绝望了:-

有人能帮我吗?

3天来发现这一点:由于我使用了密码保护(密码是attr_accessor),如果不在表单中添加密码字段,就不可能更新用户。

尝试在不输入密码的情况下编辑个人资料图片不起作用,并且没有错误消息可以让我认为这是生成的。

所以,在编辑视图中,不要忘记在表单中添加密码字段,以便能够更新用户的图片!

相关内容

  • 没有找到相关文章

最新更新