8
votes

Appartient à la présence dans les rails 5 ne fonctionne pas

À ma connaissance, la nouvelle valeur par défaut dans les rails 5 nécessite appartient à l'appartenance de d'associations à présenter. J'ai fait un modèle avec cette association, mais le problème est que je n'obtiens pas une erreur de validation de la présence lorsque le champ associé est vide. Au lieu de cela, j'ai une erreur de validation nulle de base de données depuis que je définis la colonne _id ne doit pas être null. (Pg :: notnullviolation parce que j'utilise postgres)

Ce comportement est-il normal? Je veux dire que je ne devrais-je pas obtenir l'erreur des rails?

BTW, lorsque j'ajoute la validation de la présence pour le champ, cela fonctionne comme prévu.


0 commentaires

3 Réponses :


3
votes

nouveaux rails 5 applications sont livrées avec une nouvelle initialiseur dans

# Be sure to restart your server when you modify this file.

# Require `belongs_to` associations by default. This is a new Rails 5.0
# default, so it is introduced as a configuration option to ensure that apps
# made on earlier versions of Rails are not affected when upgrading.
Rails.application.config.active_record.belongs_to_required_by_default = true


1 commentaires

rails.application.config.active_record.belongs_to_required_b y_default = true est toujours dans le New_framework_default.rb . Donc, je suppose que ce n'est pas le problème.



10
votes

Selon le problème re Comportement étrange de la configuration appartient à l'appartenance_to_required_by_default , il semble que l'un des Vos autres gemmes interviennent dans Activerecord :: Base et provoque le bogue.

Un de la solution de contournement au problème consiste à déplacer la ligne xxx

des initialisateurs directement dans application.rb .

Cela a fonctionné pour moi en douceur.


3 commentaires

Vous n'avez rien à faire si vous avez des rails 5.1. Assurez-vous simplement que config.load_defaults 5.1 est dans votre application.rb, qui correspond aux nouvelles applications générées ( référence )


Je fixe aciverecord :: base.belongs_to_required_by_default = false dans mon initialiseur


FYI Vous pouvez également définir appréhension_to_required_by_default = false dans votre ApplicationRecord



0
votes

J'ai fait face au même problème.

Vous pouvez déplacer

config.active_record.belongs_to_required_by_default = false

à config / environnements / nécessaire_environment.rb ou à config / application.rb

aidé pour moi!


0 commentaires