Come utilizzare appartiene_to in Ruby on Rails

Rotaie 4:
Supponiamo di avere due modelli Film e Attore. L'attore ha molti film e il film appartiene all'attore. Nella maggior parte dei casi, gli sviluppatori utilizzati per convalidare la chiave esterna actor_id è presente o meno. In questo caso, non convaliderà il modello dell'attore per stabilire se l'ID dell'attore inserito esiste o meno. È proprio come la convalida degli attributi che verifica sempre che i campi non siano vuoti quando si invia il modulo.

Convalida con chiave esterna:

class Movie < ApplicationRecord appartiene_a :actor convalida :actor_id, presenza: true end
class Actor < ApplicationRecord has_many :movies,dependent: :destroy end

Lo scenario precedente convalida la presenza dell'ID attore o non come il normale validatore della presenza di attributi.

Esempio: Actor.create(titolo: "abc"). => {id: 1, titolo: 'abc'} m = Movie.new(titolo: “ok ok”, actor_id: 111) => m.valid? => true => Actor.find(111) ActiveRecord::RecordNotFound: impossibile trovare l'attore con 'id'=111

Possiamo ancora salvare la registrazione del film senza un attore valido.

Con le associazioni

class Movie < ApplicationRecord appartiene_a :actor convalida :actor, presenza: true end

(O)

class Movie < ApplicationRecord appartiene_a :actor, richiesto: true end
class Actor < ApplicationRecord has_many :movies,dependent: :destroy end
Esempio: Actor.create(titolo: "abc"). ==> {id: 1, titolo: 'abc'} m = Film.nuovo(titolo: “ok ok”, actor_id: 111) ==> m.valido? => false ==> m.errors.full_messages, ['L'attore non può essere vuoto']

In questo caso verrà sempre convalidato se l'attore inserito esiste o meno. In caso di un attore non valido ti viene generato un errore. Questa è la migliore pratica per creare le tue associazioni. Controlla sempre che l'oggetto associato esista o meno.

Rotaie5

Da rails5 queste convalide sono state aggiunte per impostazione predefinita. Convalida che l'oggetto dell'associazione deve essere presente quando si definiscono le associazioni di appartenenza.

Note di rilascio

http://guides.rubyonrails.org/5_0_release_notes.html(belongs_to ora attiverà un errore di convalida per impostazione predefinita se l'associazione non è presente.)

Possiamo disattivare completamente questa funzionalità dall'applicazione impostando l'opzione di configurazione nel file inizializzatore.

config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = false

Questo file inizializzatore è presente solo nell'applicazione rails5. È necessario aggiungere manualmente questo file di inizializzazione quando si esegue la migrazione da una versione precedente dell'applicazione Rails e si apportano le modifiche necessarie.

class Post < ApplicationRecord has_many :commenti, dipendente: :distruggi fine
class Commento < ApplicationRecord appartiene_a :post end
c = Comment.create(titolo: “post fantastico”) c.errors.full_messages.to_sentence => “Il post deve esistere”

Non possiamo creare alcun record di commento senza un record associato.

Possiamo disattivare questo comportamento predefinito impostando

appartiene_a :post, opzionale: true
c = Comment.create(titolo: “post fantastico”)
=> 

RailsCarma ha offerto Servizi di sviluppo di Ruby on Rails negli ultimi 8 anni. I nostri sviluppatori sono esperti nell'esecuzione di tutti i tipi di Sviluppo web di Ruby on Rails progetti e migliorando le funzionalità delle applicazioni Rails esistenti. Contattaci per saperne di più sulle nostre capacità di sviluppo e sui progetti su cui abbiamo lavorato.

Articoli correlati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItalian