slogan3

Help me met het schrijven van Ruby code voor database-interactie

description

Met deze prompt krijg je direct bruikbare Ruby code om database-interacties te implementeren, wat je helpt om je applicatie te verbinden met databases zonder zelf complexe SQL-queries te hoeven schrijven. Het bespaart tijd en voorkomt veelvoorkomende fouten bij databasebeheer in Ruby.

prompt

Help me met het schrijven van Ruby code die interactie heeft met een database. Geef aan welk type database ik gebruik: <voer het type database in, bijvoorbeeld PostgreSQL, MySQL, SQLite>. Beschrijf de bewerkingen die ik wil uitvoeren: <beschrijf ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Ruby-code die gebruikmaakt van ActiveRecord om te werken met een PostgreSQL-database en de bewerkingen uit te voeren op een 'producten' tabel: 1. Setup en configuratie: ```ruby # Gemfile gem 'activerecord', '~> 7.0' gem 'pg' ``` Voer daarna `bundle install` uit. 2. Database configuratie: ```ruby require 'active_record' ActiveRecord::Base.establish_connection( adapter: 'postgresql', host: 'localhost', database: 'jouw_database_naam', username: 'jouw_gebruikersnaam', password: 'jouw_wachtwoord' ) ``` 3. Definieer het model: ```ruby class Product < ActiveRecord::Base self.table_name = 'producten' # indien de tabelnaam anders is end ``` 4. Voorbeeld bewerkingen: - Gegevens ophalen: ```ruby # Alle producten producten = Product.all # Specifiek product ophalen product = Product.find_by(id: 1) ``` - Toevoegen: ```ruby nieuw_product = Product.create( naam: 'Nieuwe Productnaam', prijs: 19.99, voorraad: 50 ) ``` - Bijwerken: ```ruby product = Product.find_by(id: 1) if product product.update(prijs: 24.99) end ``` - Verwijderen: ```ruby product = Product.find_by(id: 1) product.destroy if product ``` 5. Veiligheid en onderhoud: - Gebruik altijd ActiveRecord methoden zoals `create`, `update`, `destroy` die SQL-injecties voorkomen. - Gebruik `find_by` in plaats van `find` voor veilige foutafhandeling. - Maak gebruik van transacties indien meerdere bewerkingen worden gedaan die samen moeten slagen. Deze aanpak zorgt voor een veilige, efficiënte en onderhoudbare manier om met je PostgreSQL database te werken via Ruby en ActiveRecord.
provider: deepseek
model: deepseek-chat
Zeker! Hier is een complete implementatie met ActiveRecord voor PostgreSQL: ## 1. Installatie en configuratie Voeg eerst deze gems toe aan je Gemfile: ```ruby gem 'pg' gem 'activerecord' ``` ## 2. Database configuratie Maak een `database.yml` bestand: ```yaml default: &default adapter: postgresql encoding: unicode pool: 5 timeout: 5000 host: localhost username: je_gebruikersnaam password: je_wachtwoord development: <<: *default database: producten_development test: <<: *default database: producten_test production: <<: *default database: producten_production url: <%= ENV['DATABASE_URL'] %> ``` ## 3. Model definitie ```ruby # product.rb require 'active_record' class Product < ActiveRecord::Base # Validaties voor data-integriteit validates :naam, presence: true, length: { minimum: 2 } validates :prijs, presence: true, numericality: { greater_than: 0 } validates :voorraad, numericality: { only_integer: true, greater_than_or_equal_to: 0 } # Scope voor veelgebruikte queries scope :op_voorraad, -> { where('voorraad > 0') } scope :boven_prijs, ->(bedrag) { where('prijs > ?', bedrag) } # Custom method def beschikbaar? voorraad > 0 end end ``` ## 4. Database connectie en migratie ```ruby # database_setup.rb require 'active_record' require_relative 'product' # Database connectie ActiveRecord::Base.establish_connection( adapter: 'postgresql', host: 'localhost', database: 'producten_development', username: 'je_gebruikersnaar', password: 'je_wachtwoord' ) # Migratie (eenmalig uitvoeren) ActiveRecord::Schema.define do create_table :products, force: true do |t| t.string :naam, null: false t.decimal :prijs, precision: 10, scale: 2, null: false t.integer :voorraad, default: 0 t.text :beschrijving t.timestamps end add_index :products, :naam, unique: true end ``` ## 5. CRUD operaties ```ruby # product_operations.rb class ProductOperations # CREATE - Gegevens toevoegen def self.voeg_product_toe(naam, prijs, voorraad = 0, beschrijving = nil) product = Product.new( naam: naam, prijs: prijs, voorraad: voorraad, beschrijving: beschrijving ) if product.save puts "Product succesvol toegevoegd: #{product.naam}" product else puts "Fout bij toevoegen: #{product.errors.full_messages.join(', ')}" nil end end # READ - Gegevens ophalen def self.haal_producten(opties = {}) if opties[:id] Product.find_by(id: opties[:id]) elsif opties[:naam] Product.where('naam ILIKE ?', "%#{opties[:naam]}%") else Product.all end end # UPDATE - Gegevens bijwerken def self.werk_product_bij(id, attributen) product = Product.find_by(id: id) return nil unless product if product.update(attributen) puts "Product succesvol bijgewerkt: #{product.naam}" product else puts "Fout bij bijwerken: #{product.errors.full_messages.join(', ')}" nil end end # DELETE - Gegevens verwijderen def self.verwijder_product(id) product = Product.find_by(id: id) return nil unless product if product.destroy puts "Product succesvol verwijderd: #{product.naam}" true else puts "Fout bij verwijderen" false end end end ``` ## 6. Gebruiksvoorbeelden ```ruby # Gebruik van de operations require_relative 'product_operations' # Product toevoegen nieuw_product = ProductOperations.voeg_product_toe( "Laptop", 899.99, 10, "Krachtige laptop voor dagelijks gebruik" ) # Producten ophalen alle_producten = ProductOperations.haal_producten beschikbare_producten = Product.op_voorraad # Product bijwerken ProductOperations.werk_product_bij(1, { prijs: 799.99, voorraad: 5 }) # Product verwijderen ProductOperations.verwijder_product(1) ``` ## 7. Veiligheidsmaatregelen ```ruby # transaction_beheer.rb class SafeProductOperations def self.veilige_update(id, attributen) ActiveRecord::Base.transaction do product = Product.lock.find_by(id: id) return nil unless product product.update!(attributen) product end rescue ActiveRecord::RecordInvalid => e puts "Transactie mislukt: #{e.message}" nil end end ``` ## 8. Environment configuratie ```ruby # config/environment.rb require 'active_record' require 'dotenv/load' # voor environment variables ActiveRecord::Base.establish_connection( adapter: 'postgresql', host: ENV['DB_HOST'] || 'localhost', database: ENV['DB_NAME'], username: ENV['DB_USER'], password: ENV['DB_PASSWORD'], port: ENV['DB_PORT'] || 5432 ) ``` ## Belangrijke veiligheidsaspecten: 1. **Parameter validatie** via ActiveRecord validaties 2. **SQL injection preventie** door gebruik van prepared statements 3. **Transactionbeheer** voor data-integriteit 4. **Error handling** met duidelijke foutmeldingen 5. **Environment-based configuratie** voor verschillende omgevingen Deze code is modulair, testbaar en volgt best practices voor database interactie met PostgreSQL via ActiveRecord.