(Rails) update_attributes 在不使用密码的集成测试期间抛出错误(需要密码)

环球墙桌

我正在编写一个 Rails 集成测试来检查用户的标题是否保存。标题有一个验证:它必须不超过 255 个字符。但是@user.update_attributes!(title: params[:title])抛出错误“密码必须至少有6个字符”。但是...我不会更新密码或标题以外的任何内容。那么如何通过自己的验证保存这个属性而不用担心密码呢?

测试:

  test "profile submits new title and description successfully" do
    log_in_as(@non_admin)
    get user_path(@non_admin)
    assert_nil @non_admin.title
    post "/users/#{@non_admin.id}/update_description",
         { title: "I am a man of constant sorrow." }
    user = assigns(:user)
    user.reload.title
    assert user.title == "I am a man of constant sorrow."
    assert_template 'users/show'
    assert flash[:success]
  end

控制器方法(未完成,但您会明白的)。请注意,这update_attributes!是引发密码验证错误调用。

  # Handles user's posted title and description.
  def update_description
    @user = User.find(params[:id])
    # Check if title is present. If so, attempt to save, load flash, and reload.
    if @user.update_attributes!(title: params[:title])
      flash[:success] = "Saved title. "
    # if unable, set error flash and reload.
    else
      flash[:warning] = "Unable to save."
    end
    # Same logic as before, now for description.
    # Make sure two different [:success] flashes work! Probably not!
    redirect_to user_path(@user)
  end

验证:

  validates :password, length: { minimum: 6,
                                 message: "must have at least 6 characters" }
  validates :title, length: { maximum: 255 }

这是测试错误:

23:08:51 - INFO - Running: test/integration/users_show_test.rb
Started
ERROR["test_profile_submits_new_title_and_description_successfully", UsersShowTest, 2017-10-23 01:06:11 -0400]
 test_profile_submits_new_title_and_description_successfully#UsersShowTest (1508735171.57s)
ActiveRecord::RecordInvalid:         ActiveRecord::RecordInvalid: Validation failed: Password must have at least 6 characters
            app/controllers/users_controller.rb:71:in `update_description'
            test/integration/users_show_test.rb:22:in `block in <class:UsersShowTest>'
        app/controllers/users_controller.rb:71:in `update_description'
        test/integration/users_show_test.rb:22:in `block in <class:UsersShowTest>'

如果相关,这里是加载为@non_admin

archer:
  name: Sterling Archer
  email: [email protected]
  password_digest: <%= User.digest('Jsdfuisd8f') %>
  activated: true
  activated_at: <%= Time.zone.now %>

我是一个 Rails 菜鸟,所以它可能是一些基本的东西。提前致谢...

更新:请参阅下面与 kasperite 的讨论。我只需要添加on: create到我的密码验证中。

硬玉

调用update_attributes!将触发save!,进而触发对模型的验证。而且由于您不提供密码,它会抛出异常。

您可以执行update_attribute(:title, params[:title])which 绕过验证或执行以下操作:

    @user.title = params[:title]
    @user.save!(validation: false)

请参阅:http : //api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update-21

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

id为false时的rails migration update_attributes错误

来自分类Dev

使用has_secure_password的Rails update_attributes

来自分类Dev

结合使用Ajax和rails update_attributes

来自分类Dev

update_attributes在Rails中使用AJAX进行编辑操作失败

来自分类Dev

Rails 4结合使用update_attributes(params.permit)和fix变量

来自分类Dev

Rails update_attributes无法正常工作

来自分类Dev

Rails 3 update_attributes用于数组

来自分类Dev

当前用户的Rails update_attributes

来自分类Dev

特定关联模型的 Rails update_attributes

来自分类Dev

update_attribute与update_attributes Rails 4

来自分类Dev

Rails回形针:更新vs. update_attributes

来自分类Dev

Rails 4中未定义的方法update_attributes

来自分类Dev

带有动态哈希的Rails update_attributes

来自分类Dev

如何从Rails的update_attributes中排除Null值

来自分类Dev

Rails未定义方法update_attributes

来自分类Dev

对数组的列类型使用update_attributes

来自分类Dev

使用update_attributes创建了params哈希的ActiveModel :: ForbiddenAttributesError

来自分类Dev

Rails:是否有update或update_attributes在失败时引发异常?

来自分类Dev

未通过update_attributes方法更新Rails模型的某些属性

来自分类Dev

rails 3:update_attributes不会更新并以422 HTML状态代码响应

来自分类Dev

退订方法抛出未定义的方法update_attributes错误

来自分类Dev

无法使用update_attributes更新用户个人资料

来自分类Dev

为什么使用update_attributes或save时ActiveRecord会验证Model的所有列

来自分类Dev

未定义的方法“ update_attributes”?

来自分类Dev

update_attributes方法()不正常工作

来自分类Dev

nil:NilClass的未定义方法'update_attributes'

来自分类Dev

Rails测试自动生成密码

来自分类Dev

Rails + Devise:使用或不使用密码更新用户

来自分类Dev

Rails + Devise:使用或不使用密码更新用户

Related 相关文章

  1. 1

    id为false时的rails migration update_attributes错误

  2. 2

    使用has_secure_password的Rails update_attributes

  3. 3

    结合使用Ajax和rails update_attributes

  4. 4

    update_attributes在Rails中使用AJAX进行编辑操作失败

  5. 5

    Rails 4结合使用update_attributes(params.permit)和fix变量

  6. 6

    Rails update_attributes无法正常工作

  7. 7

    Rails 3 update_attributes用于数组

  8. 8

    当前用户的Rails update_attributes

  9. 9

    特定关联模型的 Rails update_attributes

  10. 10

    update_attribute与update_attributes Rails 4

  11. 11

    Rails回形针:更新vs. update_attributes

  12. 12

    Rails 4中未定义的方法update_attributes

  13. 13

    带有动态哈希的Rails update_attributes

  14. 14

    如何从Rails的update_attributes中排除Null值

  15. 15

    Rails未定义方法update_attributes

  16. 16

    对数组的列类型使用update_attributes

  17. 17

    使用update_attributes创建了params哈希的ActiveModel :: ForbiddenAttributesError

  18. 18

    Rails:是否有update或update_attributes在失败时引发异常?

  19. 19

    未通过update_attributes方法更新Rails模型的某些属性

  20. 20

    rails 3:update_attributes不会更新并以422 HTML状态代码响应

  21. 21

    退订方法抛出未定义的方法update_attributes错误

  22. 22

    无法使用update_attributes更新用户个人资料

  23. 23

    为什么使用update_attributes或save时ActiveRecord会验证Model的所有列

  24. 24

    未定义的方法“ update_attributes”?

  25. 25

    update_attributes方法()不正常工作

  26. 26

    nil:NilClass的未定义方法'update_attributes'

  27. 27

    Rails测试自动生成密码

  28. 28

    Rails + Devise:使用或不使用密码更新用户

  29. 29

    Rails + Devise:使用或不使用密码更新用户

热门标签

归档