2016-07-02 89 views
5

A mia conoscenza, il nuovo valore predefinito in Rails 5 richiede che siano presenti le associazioni belongs_to. Ho creato un modello con questa associazione, ma il problema è che non ottengo l'errore di convalida della presenza quando il campo associato è vuoto. Invece ottengo un errore di convalida del Null del database poiché ho impostato la colonna _id in modo che non fosse nulla. (PG :: NotNullViolation perché utilizzo Postgres)Belongs_to presenza in Rails 5 non funzionante

Questo comportamento è normale? Voglio dire, non dovrei ottenere l'errore dei binari solo?

BTW, quando aggiungo la convalida della presenza per il campo, funziona come mi aspettavo.

risposta

5

In base al numero weird behaviour of config belongs_to_required_by_default, sembra che una delle altre gemme interviene in ActiveRecord::Base e causa l'errore.

Una delle soluzioni al problema è quello di spostare la linea

config.active_record.belongs_to_required_by_default = true 

da initializers direttamente in application.rb.

Questo ha funzionato bene per me.

+0

Non hai bisogno di fare nulla se hai Rails 5.1. Assicurati che 'config.load_defaults 5.1' sia nella tua applicazione.rb, che è l'impostazione predefinita per le nuove app generate ([riferimento] (https://github.com/rails/rails/issues/23589#issuecomment-305557647)) –

3

Nuove Rails 5 applicazioni sono dotati di una nuova inizializzatore in

config/initializers/active_record_belongs_to_required_by_default.rb 

Se avete aggiornato un'applicazione Rails 4 o creato l'applicazione con una versione beta di Rails 5, quindi il file potrebbe essere mancante.

La configurazione nel file consente la funzionalità in questione:

# 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 

Si prega di verificare come belongs_to_required_by_default è configurato nell'applicazione.

+2

'Rails.application.config.active_record.belongs_to_required_by_default = true' è ancora nel' new_framework_defaults.rb' del progetto. Quindi suppongo che non sia il problema. – Arvinje

0

Ho affrontato lo stesso problema.

È possibile spostare

config.active_record.belongs_to_required_by_default = false

a config/environments/needed_environment.rb o config/application.rb

aiutato per me!

Problemi correlati