Räls 4:
Låt oss anta att vi har två modeller film och skådespelare. Skådespelare har många filmer och film tillhör skådespelare. I de flesta fall är utvecklarna som används för att validera att den främmande nyckeln actor_id är närvarande eller inte. I det här fallet kommer den inte att validera aktörsmodellen om det angivna aktörs-ID:t finns eller inte. Det är precis som attributvalidering som alltid validerar att fälten inte ska vara tomma när formuläret skickas.
Validering med främmande nyckel:
klass Film < ApplicationRecord tillhör_till :skådespelare validerar :aktör_id, närvaro: sant slut
klass Skådespelare < ApplicationRecord has_many :movies, dependent: :destroy end
Scenariot ovan validerar närvaro av aktörs-id eller inte som normal närvarovalidator för attribut.
Ex: Actor.create(titel: "abc"). => {id: 1, title: 'abc'} m = Movie.new(title: “ok ok”, actor_id: 111) => m.valid? => true => Actor.find(111) ActiveRecord::RecordNotFound: Kunde inte hitta skådespelare med 'id'=111
Vi kan fortfarande spara filmrekordet utan giltig skådespelare.
Med föreningar
klass Film < ApplicationRecord tillhör_till :skådespelare validerar :skådespelare, närvaro: sant slut
(eller)
klass Film < ApplicationRecord tillhör :skådespelare, obligatoriskt: sant slut
klass Skådespelare < ApplicationRecord has_many :movies, dependent: :destroy end
Ex: Actor.create(titel: "abc"). ==> {id: 1, title: 'abc'} m = Movie.new(title: “ok ok”, actor_id: 111) ==> m.valid? => false ==> m.errors.full_messages, ['Skådespelare kan inte vara tom']
I det här fallet kommer den alltid att validera om den angivna aktören finns eller inte. I händelse av en ogiltig skådespelare ger det fel till dig. Detta är den bästa praxis för att skapa dina associationer. Den kontrollerar alltid om det associerade objektet finns eller inte.
Räls5
Från rails5 lades dessa valideringar till som standard. Det validerar att associationsobjekt ska finnas när du definierar tillhör_till associationer.
Release notes
http://guides.rubyonrails.org/5_0_release_notes.html(belongs_to kommer nu att utlösa ett valideringsfel som standard om kopplingen inte finns.)
Vi kan välja bort den här funktionen helt från applikationen genom att ställa in config opton i initialiseringsfilen.
config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = false
Denna initialiseringsfil finns endast i rails5-applikationen. Behöver lägga till denna initialiseringsfil manuellt när du migrerar från en äldre version av din rails-applikation och gör nödvändiga ändringar.
class Post < ApplicationRecord has_many :comments, dependent: :destroy end
klass Kommentar < ApplicationRecord tillhör_till :postslut
c = Comment.create(title: “awesome post”) c.errors.full_messages.to_sentence => “Inlägg måste finnas”
Vi kan inte skapa någon kommentarspost utan en tillhörande post.
Vi kan välja bort detta standardbeteende genom att ställa in
tillhör_till :post, valfritt: sant
c = Comment.create(title: "fantastiskt inlägg")
=>
RailsCarma har erbjudit Ruby on Rails utvecklingstjänster under de senaste 8 åren. Våra utvecklare är väl insatta i att utföra alla slags Ruby on Rails webbutveckling projekt och förbättra funktionerna i dina befintliga Rails-applikationer. Kontakta oss för att veta mer om vår utvecklingskompetens och de projekt vi har arbetat med.