使用客户验证程序后,为什么必须在rspec中重新加载记录?

railsuser400

我有一个模型User该模型在创建后在回调中创建了选项

# User
has_one :user_options

after_create :create_options

private

def create_options
  UserOptions.create(user: self)
end

我对此有一些简单的Rspec涵盖:

describe "new user" do
  it "creates user_options after the user is created" do
    user = create(:user)
    user.user_options.should be_kind_of(UserOptions)
  end
end

一切正常,直到我向用户模型添加了自定义验证。

validate :check_whatever, if: :blah_blah

现在规范失败了,唯一的方法就是重新加载规范中的记录:

it "creates user_preferences for the user" do
  user = create(:user)
  user.reload
  user.user_options.should be_kind_of(UserOptions)
end

这是什么原因呢?

诗人

首先,我建议阅读有关调试Rails应用程序的文章:http : //nofail.de/2013/10/debugging-rails-applications-in-development/

其次,我将对您的代码提出一些更改:

def create_options
  UserOptions.create(user: self)
end

应该

def create_options
  self.user_option.create
end

这样,您不必在保存后重新加载对象,因为该对象的关系中已经具有新的UserOptions实体。

从代码中假设create(:user)您正在使用灯具。您在user.yml中使用的数据和编写的验证可能存在问题,但不幸的是没有在此处发布。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么必须在C ++类定义中声明方法?

来自分类Dev

为什么必须在rspec规范中重新加载实例变量?

来自分类Dev

为什么必须在回调中对AnyEvent计时器观察程序进行定义?

来自分类Dev

为什么在插入> 150,000条记录后必须在表上重建索引?

来自分类Dev

为什么必须在最终声明中声明列表

来自分类Dev

急于加载记录后搜索Laravel?

来自分类Dev

为什么我必须在jQuery查询后使用[0]

来自分类Dev

为什么必须在子类中重新声明PoolDictionaries?

来自分类Dev

为什么必须在onCreate中初始化对象?

来自分类Dev

为什么我必须在onLoaderReset中交换swapCursor(null)?

来自分类Dev

为什么我必须在客户端库中公开宏实现的“使用”?

来自分类Dev

使用es6时为什么必须在服务名称中添加尾部“提供程序”

来自分类Dev

ReactiveUI:使用TestScheduler时,为什么必须在“ ... Throttle ...”中显式指定调度程序

来自分类Dev

为什么必须在内核更新上重新安装视频驱动程序?

来自分类Dev

为什么必须在onChanged(在Flutter中)中调用didChange?

来自分类Dev

为什么必须在类中调用_internal()?

来自分类Dev

为什么我们必须在Java脚本(Razor)中对C#代码使用引号

来自分类Dev

使用客户验证器后,为什么必须在rspec中重新加载记录?

来自分类Dev

重新连接时,为什么必须在tmux中重新设置环境变量?

来自分类Dev

为什么方法varargs必须在Java的单独块中?

来自分类Dev

为什么必须在子类中重新声明PoolDictionaries?

来自分类Dev

为什么我必须在Windows 10中的所有命令后都键入.exe?

来自分类Dev

为什么我必须在onLoaderReset中交换swapCursor(null)?

来自分类Dev

在angular2中动态加载组件时,为什么必须在容器中写入目标?

来自分类Dev

为什么在Flask应用程序开发中必须在PostgreSQL中使用SQLAlchemy?

来自分类Dev

使用扫描仪读取文件时,为什么扫描仪必须在方法中?

来自分类Dev

为什么我必须在内核更新时重新安装视频驱动程序?

来自分类Dev

为什么我必须在数据加载之前点击?

来自分类Dev

为什么我必须在数据加载之前点击?

Related 相关文章

  1. 1

    为什么必须在C ++类定义中声明方法?

  2. 2

    为什么必须在rspec规范中重新加载实例变量?

  3. 3

    为什么必须在回调中对AnyEvent计时器观察程序进行定义?

  4. 4

    为什么在插入> 150,000条记录后必须在表上重建索引?

  5. 5

    为什么必须在最终声明中声明列表

  6. 6

    急于加载记录后搜索Laravel?

  7. 7

    为什么我必须在jQuery查询后使用[0]

  8. 8

    为什么必须在子类中重新声明PoolDictionaries?

  9. 9

    为什么必须在onCreate中初始化对象?

  10. 10

    为什么我必须在onLoaderReset中交换swapCursor(null)?

  11. 11

    为什么我必须在客户端库中公开宏实现的“使用”?

  12. 12

    使用es6时为什么必须在服务名称中添加尾部“提供程序”

  13. 13

    ReactiveUI:使用TestScheduler时,为什么必须在“ ... Throttle ...”中显式指定调度程序

  14. 14

    为什么必须在内核更新上重新安装视频驱动程序?

  15. 15

    为什么必须在onChanged(在Flutter中)中调用didChange?

  16. 16

    为什么必须在类中调用_internal()?

  17. 17

    为什么我们必须在Java脚本(Razor)中对C#代码使用引号

  18. 18

    使用客户验证器后,为什么必须在rspec中重新加载记录?

  19. 19

    重新连接时,为什么必须在tmux中重新设置环境变量?

  20. 20

    为什么方法varargs必须在Java的单独块中?

  21. 21

    为什么必须在子类中重新声明PoolDictionaries?

  22. 22

    为什么我必须在Windows 10中的所有命令后都键入.exe?

  23. 23

    为什么我必须在onLoaderReset中交换swapCursor(null)?

  24. 24

    在angular2中动态加载组件时,为什么必须在容器中写入目标?

  25. 25

    为什么在Flask应用程序开发中必须在PostgreSQL中使用SQLAlchemy?

  26. 26

    使用扫描仪读取文件时,为什么扫描仪必须在方法中?

  27. 27

    为什么我必须在内核更新时重新安装视频驱动程序?

  28. 28

    为什么我必须在数据加载之前点击?

  29. 29

    为什么我必须在数据加载之前点击?

热门标签

归档