2016-08-09 2 views
10

Я использую Rails 5.0.0, но почему-то belongs_to_required_by_default не работает!Rails 5 принадлежит_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 

Спасибо за любой предложения

ответ

9

Куда вы его положили? Подтвердили это, положив его в 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

Я считаю, что вы найдете положить его в каталоге инициализаторов будут иметь проблемы с порядка загрузки.

+0

У меня есть это по умолчанию в 'my_app/config/initializers/new_framework_defaults.rb' –

+1

, если вы хотите его для всего, что вы можете поместить в' application.rb' под 'class Application Ropeney

+0

yep он работает как для вашего ответа, но я не могу понять, почему он не инициализируется из папки инициализаторов? –

7

EDIT FOR RAILS 5.1: Все должно работать хорошо по умолчанию Rails 5.1. Просто убедитесь, что config.load_defaults 5.1 в вашем приложении.rb (reference).

OLD ОТВЕТ НА РЕЛЬСЫ 5.0.x

Он выглядит так из-за некоторые драгоценные камни, что обезьяны патч ActiveRecord некорректны, по этому вопросу 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_default‌​s.rb инициализаторе, а не в application.rb.

4

Если у кого-то все еще есть эта проблема, вы можете выполнить обновление до 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.

Смежные вопросы