Rails 5 belongs_to_required_by_default不起作用

问题描述 投票:14回答:3

我使用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
ruby-on-rails
3个回答
16
投票

你把它放在哪里?已确认它的工作原理是把它放在development.rb作为config.active_record.belongs_to_required_by_default = true里面的Rails.application.configure do

如果你想要它的一切你可以把它放在application.rbApplication < Rails::Application下作为config.active_record.belongs_to_required_by_default = true

我相信你会发现把它放在初始化器目录中会出现加载顺序问题。


10
投票

编辑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_mateycancancandelayed_job_active_record(在撰写本文时)。

与此同时,Ropeney的答案有效,虽然并不理想,因为“官方轨道方式”是在config.active_record.belongs_to_required_by_default = true初始化器中声明new_framework_default‌​s.rb,而不是在application.rb


5
投票

如果有人仍然遇到此问题,您可以升级到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 = truenew_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

© www.soinside.com 2019 - 2024. All rights reserved.