"Status is Invalid" - 活动记录 - Rails 4.1 -> 5.2
"Status is Invalid" - Active Record - Rails 4.1 -> 5.2
我正在努力将 Ruby 2.2.2 (Rails 4.1) 应用程序升级到 Ruby 2.5.7 (Rails 5.2) 并且对于几个模型我遇到了一些错误
通过搜索,似乎有一些通用的 activerecord 验证规则/消息?消息是:
Status is invalid
User is invalid`
我充其量只是 Ruby 的新手 - 所以任何关于解决此错误的最佳方法的建议都将不胜感激!
在Rails5中,每当定义一个belongs_to
关联时,默认情况下要求关联记录存在。这意味着,与 Rails 4 相比,每个 belongs_to :foo
关联基本上也在代码内部添加了一个 validate :foo, presence: true
。
您有两个选择:
- 遵循新的 Ruby on Rails 约定,并通过将所有必需的关联对象添加到模型来修复测试。
- 通过将
, optional: true
添加到代码中的每个 belongs_to :foo
行,切换回这些关联的旧行为。
实际上有第三个选项可以在整个应用程序中关闭此行为,方法是在 application.rb
中添加这样一行
Rails.application.config.active_record.belongs_to_required_by_default = true
但这意味着您的应用程序将不再遵循 Ruby 上的 Rails 约定和默认值,恕我直言,这通常会导致以后的更新出现问题。
因此我的建议是:现在修复你的测试,只让那些从用户的角度来看真正可选的关联是可选的——这可能需要更长的时间,但在未来造成的麻烦肯定会更少。
我正在努力将 Ruby 2.2.2 (Rails 4.1) 应用程序升级到 Ruby 2.5.7 (Rails 5.2) 并且对于几个模型我遇到了一些错误
通过搜索,似乎有一些通用的 activerecord 验证规则/消息?消息是:
Status is invalid
User is invalid`
我充其量只是 Ruby 的新手 - 所以任何关于解决此错误的最佳方法的建议都将不胜感激!
在Rails5中,每当定义一个belongs_to
关联时,默认情况下要求关联记录存在。这意味着,与 Rails 4 相比,每个 belongs_to :foo
关联基本上也在代码内部添加了一个 validate :foo, presence: true
。
您有两个选择:
- 遵循新的 Ruby on Rails 约定,并通过将所有必需的关联对象添加到模型来修复测试。
- 通过将
, optional: true
添加到代码中的每个belongs_to :foo
行,切换回这些关联的旧行为。
实际上有第三个选项可以在整个应用程序中关闭此行为,方法是在 application.rb
Rails.application.config.active_record.belongs_to_required_by_default = true
但这意味着您的应用程序将不再遵循 Ruby 上的 Rails 约定和默认值,恕我直言,这通常会导致以后的更新出现问题。
因此我的建议是:现在修复你的测试,只让那些从用户的角度来看真正可选的关联是可选的——这可能需要更长的时间,但在未来造成的麻烦肯定会更少。