Ruby on Rails - Ponteggi

Mentre stai sviluppando applicazioni Rails, specialmente quelle che ti forniscono principalmente una semplice interfaccia per i dati in un database, spesso può essere utile usare il metodo scaffold.

Le impalcature offrono più che brividi demo economici. Ecco alcuni vantaggi:

  • Puoi ottenere rapidamente il codice davanti ai tuoi utenti per il feedback.

  • Sei motivato da un successo più veloce.

  • Puoi imparare come funziona Rails guardando il codice generato.

  • Puoi utilizzare lo scaffolding come base per avviare rapidamente il tuo sviluppo.

Esempio di ponteggi

Per comprendere lo scaffolding, creiamo un database chiamatocookbook e un tavolo chiamato recipes.

Creazione di un'applicazione Web Rails vuota

Apri una finestra di comando e vai alla posizione in cui desideri crearla cookbookapplicazione web. Quindi, esegui il seguente comando per creare una struttura di directory completa.

tp> rails new cookbook

Configurazione del database

Ecco il modo per creare un database:

mysql> create database cookbook;
Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on cookbook.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Per istruire Rails su come trovare il database, modificare il file di configurazione cookbook \ config \ database.yml e cambiare il nome del database in cookbook. Lascia la password vuota. Al termine, dovrebbe apparire come segue:

development:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost
	
test:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost
	
production:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost

Rails ti consente di eseguire in modalità sviluppo, modalità test o modalità produzione, utilizzando diversi database. Questa applicazione utilizza lo stesso database per ciascuno.

Il codice dello scaffold generato

Con l'azione scaffold, Rails genera dinamicamente tutto il codice di cui ha bisogno. Eseguendo scaffold come script, possiamo ottenere tutto il codice scritto su disco, dove possiamo esaminarlo e quindi iniziare ad adattarlo alle nostre esigenze.

Quindi ora, iniziamo ancora una volta a generare manualmente il codice Scaffold utilizzando lo script di supporto scaffold -

cookbook> rails generate scaffold recipe

Genera file automatici come mostrato di seguito -

Il controller

Diamo un'occhiata al codice dietro il controller. Questo codice è generato dascaffoldGeneratore. Se apri app / controllers / ricette_controller.rb, troverai qualcosa come segue:

class RecipesController < ApplicationController
   before_action :set_recipe, only: [:show, :edit, :update, :destroy]
   
   # GET /recipes
   # GET /recipes.json
   def index
      @recipes = Recipe.all
   end
   
   # GET /recipes/1
   # GET /recipes/1.json
   def show
   end
   
   # GET /recipes/new
   def new
      @recipe = Recipe.new
   end
   
   # GET /recipes/1/edit
   def edit
   end
   
   # POST /recipes
   # POST /recipes.json
   def create
      @recipe = Recipe.new(recipe_params)
      
      respond_to do |format|
         if @recipe.save
            format.html { redirect_to @recipe, notice: 'Recipe was successfully created.' }
            format.json { render :show, status: :created, location: @recipe }
         else
            format.html { render :new }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end
      
   end
   
   # PATCH/PUT /recipes/1
   # PATCH/PUT /recipes/1.json
   def update
      respond_to do |format|
         if @recipe.update(recipe_params)
            format.html { redirect_to @recipe, notice: 'Recipe was successfully updated.' }
            format.json { render :show, status: :ok, location: @recipe }
         else
            format.html { render :edit }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end
      
   end
   
   # DELETE /recipes/1
   # DELETE /recipes/1.json
   def destroy
      @recipe.destroy
         respond_to do |format|
         format.html { redirect_to recipes_url, notice: 'Recipe was successfully destroyed.' }
         format.json { head :no_content }
      end
   end
   
   private
   
   # Use callbacks to share common setup or constraints between actions.
   def set_recipe
      @recipe = Recipe.find(params[:id])
   end
   
   # Never trust parameters from the scary internet, only allow the white list through.
   def recipe_params
      params.require(:recipe).permit(:tittle, :instructions)
   end
end

Quando l'utente di un'applicazione Rails seleziona un'azione, ad esempio "Show" - il controller eseguirà qualsiasi codice nella sezione appropriata - "def show" - e quindi di default renderà un template con lo stesso nome - "show.html. erb ". Questo comportamento predefinito può essere sovrascritto.

Il controller utilizza metodi ActiveRecord come find, find_all, new, save, update_attributes e destroy per spostare i dati da e verso le tabelle del database. Nota che non devi scrivere alcuna istruzione SQL, rails se ne occuperà automaticamente.

Questa singola riga di codice darà vita alla tabella del database. Fornirà una semplice interfaccia ai tuoi dati e modi per:

  • Creazione di nuove voci
  • Modifica delle voci correnti
  • Visualizzazione delle voci correnti
  • Distruggere le voci correnti

Quando crei o modifichi una voce, scaffold farà tutto il lavoro duro come la generazione e la gestione del modulo per te e fornirà anche una generazione intelligente del modulo, supportando i seguenti tipi di input:

  • Stringhe di testo semplici
  • Aree di testo (o grandi blocchi di testo)
  • Selettori di data
  • Selettori di data e ora

Puoi usare Rails Migrations per creare e mantenere tabelle.

rake db:migrate RAILS_ENV=development

Ora vai nella directory del ricettario ed esegui il server Web utilizzando il seguente comando:

cookbook> rails server

Ora apri un browser e vai a http://127.0.0.1:3000/recipe/new.Questo ti fornirà una schermata per creare nuove voci nella tabella delle ricette. Di seguito è mostrato uno screenshot:

Una volta premuto il pulsante Create pulsante per creare una nuova ricetta, il tuo record viene aggiunto alla tabella delle ricette e mostra il seguente risultato:

Puoi vedere l'opzione per modificare, mostrare e distruggere i record. Quindi, gioca con queste opzioni.

Puoi anche elencare tutte le ricette disponibili nella tabella delle ricette utilizzando l'URL http://127.0.0.1:3000/recipe/list.

Migliorare il modello

Rails ti offre un sacco di gestione degli errori gratuitamente. Per capirlo, aggiungi alcune regole di convalida al modello di ricetta vuoto -

Modifica app / models / ricetta.rb come segue e poi prova la tua applicazione -

class Recipe < ActiveRecord::Base
   validates_length_of :title, :within => 1..20
   validates_uniqueness_of :title, :message => "already exists"
end

Queste voci daranno un controllo automatico.

  • validates_length_of - il campo non è vuoto e non è troppo lungo.

  • validates_uniqueness_of- i valori duplicati vengono intrappolati. Invece del messaggio di errore predefinito di Rails, abbiamo fornito un messaggio personalizzato qui.

Modo alternativo per creare impalcature

Creare un'applicazione come mostrato sopra e The Generated Scaffold Code come mostrato di seguito

rails g scaffold Recipe tittle:string instructions:text

Il codice sopra genera i file automatici con il database utilizzando sqlite3 con tittle e colonna di istruzioni come mostrato sotto un'immagine.

abbiamo bisogno di migrare il database utilizzando la sintassi seguente.

$ rake db:migrate RAILS_ENV=development

Infine, esegui l'applicazione utilizzando la seguente riga di comando:

rails server

Genererà il risultato come mostrato sopra le immagini di output.

Le visualizzazioni

Tutte le viste e tutti i metodi del controller corrispondenti vengono creati da scaffold e sono disponibili nella directory app / views / ricette.

In che modo le impalcature sono diverse?

Se hai seguito i capitoli precedenti, devi aver visto che abbiamo creato metodi per elencare, mostrare, eliminare e creare dati, ecc., Ma lo scaffolding fa quel lavoro automaticamente.