仅在单个属性更新时添加状态验证

时间:2012-07-12 14:08:00

标签: ruby-on-rails ruby ruby-on-rails-3 paperclip rspec2

上下文:我有一个附带头像的用户模型(通过回形针)。在创建用户时不需要化身,但是当用户在他的简档上更新他的化身时我想要化身。 当用户上传新的化身时,仅通过ajax请求提交化身。此时,如果file_field为空,我想返回验证错误。

起初我用过

  validates_attachment_presence :avatar, message: "The file is missing", :if => ->{ !new_record? }

但它不能完全按预期工作,这使我的验证测试套件在should be_valid

上失败
describe User do
  before do
    @user = FactoryGirl.create :user
  end

  subject { @user }

  [...]

  it { should be_valid }
end

这是正常的。

我对如何处理这个有任何想法? 我提出的唯一另一个想法是,如果文件字段为空但是看起来很乱,那么在UserController#update的@user.errors中注入一个新错误。

感谢。

1 个答案:

答案 0 :(得分:1)

validates_attachment_presence :avatar, message: "The file is missing", on: :update

http://guides.rubyonrails.org/active_record_validations_callbacks.html#on