加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:31:47 所属栏目:百科 来源:网络整理
导读:我的用户模型中有以下内容 attr_accessible :avatar,:emailvalidates_presence_of :emailhas_attached_file :avatar # paperclipvalidates_attachment_size :avatar,:less_than = 1.megabyte,:message = 'Image cannot be larger than 1MB in size',:if = Pr
我的用户模型中有以下内容
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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读