我使用Rails 5.0.0,但由于某种原因belongs_to_required_by_default
不起作用!
应用程序创建为新的rails 5 app
class Visit < ApplicationRecord
belongs_to :user
end
> v = Visit.new
> v.valid? # => true
它只适用于optional: false
选项
class Visit < ApplicationRecord
belongs_to :user, optional: false
end
> v = Visit.new
> v.valid? # => false
但为什么不工作配置:
Rails.application.config.active_record.belongs_to_required_by_default = true
你把它放在哪里?已确认它的工作原理是把它放在development.rb
作为config.active_record.belongs_to_required_by_default = true
里面的Rails.application.configure do
。
如果你想要它的一切你可以把它放在application.rb
类Application < Rails::Application
下作为config.active_record.belongs_to_required_by_default = true
我相信你会发现把它放在初始化器目录中会出现加载顺序问题。
编辑RAILS 5.1:一切都应该在默认的Rails 5.1应用程序上运行良好。只需确保config.load_defaults 5.1
在您的application.rb(reference)中。
RAILS 5.0.x的旧答案
根据这个Rails问题https://github.com/rails/rails/issues/23589,看起来这是由于某些宝石错误地修补了补丁活动记录。
您可能希望在Gemfile中对它们进行注释/取消注释,直到找到罪魁祸首。
在这个繁琐的过程之后,我发现对于我的最新项目,导致问题的宝石ahoy_matey
,cancancan
和delayed_job_active_record
(在撰写本文时)。
与此同时,Ropeney的答案有效,虽然并不理想,因为“官方轨道方式”是在config.active_record.belongs_to_required_by_default = true
初始化器中声明new_framework_defaults.rb
,而不是在application.rb
。
如果有人仍然遇到此问题,您可以升级到Rails 5.1来修复它。在Rails 5.1中,config/initializers/new_framework_defaults.rb
已被删除并替换为config.load_defaults 5.1
中的application.rb
行。这一行包括active_record.belongs_to_required_by_default = true
和new_framework_defaults.rb
中的其他选项。
module myApp
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails
version.
config.load_defaults 5.1
有关更多详细信息,请参阅此主题的结尾:https://github.com/rails/rails/issues/23589。