回形针验证无效

时间:2013-07-01 21:17:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

Paperclip允许任何类型的文件上传,我不明白。在我的应用程序中,默认情况下,用户在注册时不必上传头像,但他们可能会在注册后更新头像。并且用户能够成功更新他们的头像。这一切都运行正常,但验证没有开始。

User.rb中的验证码:

has_attached_file :avatar, :styles => { :profile => "150x150#"}, :default_url => 'missing_:style.png'

validates_attachment :avatar, presence: true,
          content_type: { content_type: ['image/jpeg', 'image/jpg', 'image/png'], :message => 'must be a PNG, JPG, or JPEG'},
          size: {less_than: 5.megabytes, :message => 'must be less than 5 megabytes'}

在我的路线中,我有这个:

put 'updateavatar' => 'profile#updateavatar'

这是我的表格:

<%= form_for current_user, :html => { :multipart => true }, :url => {:action => 'updateavatar'} do |form| %>
  <%= form.file_field :avatar %>
  <%= form.submit "Upload", class: "btn uploadbtn" %>
<% end %>

我不知道为什么这不起作用?它实际上允许在用户更新其个人资料时上传任何类型的文件。

在我的个人资料控制器中,我有这个:

  def updateavatar
   if params[:user][:password].blank?
     params[:user].delete(:password)
     params[:user].delete(:password_confirmation)
   end
   respond_to do |format|
     if current_user.update_attribute(:avatar, params[:user][:avatar])
       flash[:notice] = 'successfully updated.'
       format.html { redirect_to profile_index_path }
     else
       format.html { render action: "index" }
     end
   end
 end

2 个答案:

答案 0 :(得分:3)

<强> update_attribute

  # File vendor/rails/activerecord/lib/active_record/base.rb, line 2614
2614:       def update_attribute(name, value)
2615:         send(name.to_s + '=', value)
2616:         save(false)
2617:       end

<强> update_attributes方法

  # File vendor/rails/activerecord/lib/active_record/base.rb, line 2621
2621:       def update_attributes(attributes)
2622:         self.attributes = attributes
2623:         save
2624:       end

因此,使用update_attribute将更新对象,但会跳过验证,使用update_attributes将使用验证更新对象。

看起来像你应该拥有的控制器:

if current_user.update_attributes(:avatar, params[:user][:avatar]) .....

答案 1 :(得分:0)

current_user.update_attributes(:avatar =&gt; params [:user] [:avatar])修复了它