【问题标题】:"Status is Invalid" - Active Record - Rails 4.1 -> 5.2“状态无效” - Active Record - Rails 4.1 -> 5.2
【发布时间】:2020-03-01 01:43:30
【问题描述】:
我正在努力将 Ruby 2.2.2 (Rails 4.1) 应用程序升级到 Ruby 2.5.7 (Rails 5.2) 并针对几个模型我'我遇到了一些错误
通过搜索,听起来好像有一些通用的活动记录验证规则/消息?消息是:
Status is invalid
User is invalid`
我充其量只是 Ruby 的新手 - 所以任何有关解决此错误的最佳方法的建议都非常感谢!
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-5
【解决方案1】:
在 Rails 5 中,只要定义了 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 on Rails 约定和默认设置,恕我直言,这通常会导致以后更新出现问题。
因此我的建议是:现在修复你的测试,只让那些从用户的角度来看是真正可选的关联是可选的——这可能需要更长的时间,但在未来造成的麻烦肯定会更少。