Rails 5 принадлежит_от_required_by_default не работает
Я использую Rails 5.0.0, но по какой-то причине belongs_to_required_by_default
не работает!
Приложение было создано в качестве новых рельсов 5 приложений
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
Спасибо за любые предложения
Ответы
Ответ 1
Где вы его положили? Подтвердите это, положив его в 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
Я считаю, что вы найдете его в каталоге инициализаторов, будет иметь проблемы с порядком загрузки.
Ответ 2
РЕДАКТИРОВАТЬ ДЛЯ ЖЕЛЕЗНЫХ ДОРОГ 5.1: Все должно работать хорошо в приложении Rails 5.1 по умолчанию. Просто убедитесь, что config.load_defaults 5.1
находится в вашем приложении .rb(ссылка).
OLD ANSWER FOR 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
.
Ответ 3
Если у кого-то все еще есть эта проблема, вы можете перейти на 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.