ruby-on-rails – 验证和更新单个属性rails

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 验证和更新单个属性rails前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的用户模型中有以下内容
attr_accessible :avatar,:email

validates_presence_of :email
has_attached_file :avatar # paperclip

validates_attachment_size :avatar,:less_than => 1.megabyte,:message => 'Image cannot be larger than 1MB in size',:if => Proc.new { |imports| !imports.avatar_file_name.blank? }

在我的一个控制器中,我只想更新和验证头像字段而不更新和验证电子邮件.

我怎样才能做到这一点?

例如(这不起作用)

if @user.update_attributes(params[:user])
 # do something... 
end

我也尝试过update_attribute(‘avatar’,params [:user] [:avatar]),但这也会跳过avatar字段的验证.

解决方法

您可以使用 validate the attribute by hand并使用 update_attribute,即 skips validation.如果添加 this to your User
def self.valid_attribute?(attr,value)
  mock = self.new(attr => value)
  if mock.valid?
    true
  else
    !mock.errors.has_key?(attr)
  end
end

然后这样更新属性

if(!User.valid_attribute?('avatar',params[:user][:avatar])
    # Complain or whatever.
end
@user.update_attribute('avatar',params[:user][:avatar])

只有(手动)验证该属性时,才应更新单个属性.

如果你看一下Milan Novota的valid_attribute怎么样?工作,你会看到它执行验证,然后检查特定的attr是否有问题;是否有任何其他验证作为valid_attribute失败并不重要?仅查看您感兴趣的属性的验证失败.

如果您要做很​​多这样的事情,那么您可以向用户添加一个方法

def update_just_this_one(attr,value)
    raise "Bad #{attr}" if(!User.valid_attribute?(attr,value))
    self.update_attribute(attr,value)
end

并使用它来更新您的单个属性.

猜你在找的Ruby相关文章