Ruby on Rails - rusztowanie

Podczas tworzenia aplikacji Railsowych, szczególnie tych, które głównie zapewniają prosty interfejs do danych w bazie danych, często przydatne może być użycie metody szkieletowej.

Rusztowanie zapewnia więcej niż tanie emocje demonstracyjne. Oto kilka korzyści -

  • Możesz szybko przekazać użytkownikom kod w celu uzyskania opinii.

  • Motywuje Cię szybszy sukces.

  • Możesz dowiedzieć się, jak działają Railsy, ​​patrząc na wygenerowany kod.

  • Możesz użyć rusztowania jako podstawy do szybkiego rozpoczęcia rozwoju.

Przykład rusztowania

Aby zrozumieć tworzenie szkieletów, utwórzmy bazę danych o nazwiecookbook i stół o nazwie recipes.

Tworzenie pustej aplikacji internetowej Rails

Otwórz okno poleceń i przejdź do miejsca, w którym chcesz to utworzyć cookbookAplikacja internetowa. Więc uruchom następujące polecenie, aby utworzyć pełną strukturę katalogów.

tp> rails new cookbook

Konfiguracja bazy danych

Oto sposób na utworzenie bazy danych -

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)

Aby poinstruować Railsy, ​​jak znaleźć bazę danych, edytuj plik konfiguracyjny cookbook \ config \ database.yml i zmień nazwę bazy danych na cookbook. Zostaw hasło puste. Kiedy skończysz, powinno wyglądać następująco -

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

Railsy pozwalają na uruchamianie w trybie programistycznym, testowym lub produkcyjnym przy użyciu różnych baz danych. Ta aplikacja używa tej samej bazy danych dla każdego.

Wygenerowany kod szkieletu

Dzięki akcji scaffold Railsy generują cały kod, którego potrzebuje, dynamicznie. Uruchamiając scaffold jako skrypt, możemy pobrać cały kod zapisany na dysku, gdzie możemy go zbadać, a następnie zacząć dostosowywać go do naszych wymagań.

Więc teraz zacznijmy od nowa, aby ręcznie wygenerować kod Scaffolda za pomocą skryptu pomocniczego scaffold -

cookbook> rails generate scaffold recipe

Generuje automatyczne pliki, jak pokazano poniżej -

Administrator

Spójrzmy na kod za kontrolerem. Ten kod jest generowany przezscaffoldgenerator. Jeśli otworzysz app / controllers / recipes_controller.rb, znajdziesz coś takiego -

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

Gdy użytkownik aplikacji Railsowej wybierze akcję, np. „Show” - kontroler wykona dowolny kod w odpowiedniej sekcji - „def show” - a następnie domyślnie wyrenderuje szablon o tej samej nazwie - „show.html”. erb ”. To domyślne zachowanie można zastąpić.

Kontroler używa metod ActiveRecord, takich jak find, find_all, new, save, update_attributes i destru, aby przenosić dane do iz tabel bazy danych. Zauważ, że nie musisz pisać żadnych instrukcji SQL, railsy zajmą się tym automatycznie.

Ta pojedyncza linia kodu ożywi tabelę bazy danych. Zapewni prosty interfejs do Twoich danych i sposoby -

  • Tworzenie nowych wpisów
  • Edycja aktualnych wpisów
  • Przeglądanie aktualnych wpisów
  • Niszczenie aktualnych wpisów

Podczas tworzenia lub edytowania wpisu scaffold wykona za Ciebie całą ciężką pracę, taką jak generowanie i obsługa formularzy, a nawet zapewni sprytne generowanie formularzy, obsługując następujące typy danych wejściowych -

  • Proste ciągi tekstowe
  • Obszary tekstowe (lub duże bloki tekstu)
  • Selektory daty
  • Selektory daty i godziny

Możesz użyć migracji Rails do tworzenia i utrzymywania tabel.

rake db:migrate RAILS_ENV=development

Teraz przejdź do katalogu książki kucharskiej i uruchom serwer WWW za pomocą następującego polecenia -

cookbook> rails server

Teraz otwórz przeglądarkę i przejdź do http://127.0.0.1:3000/recipe/new.Spowoduje to wyświetlenie ekranu umożliwiającego tworzenie nowych wpisów w tabeli receptur. Zrzut ekranu pokazano poniżej -

Po naciśnięciu Create aby utworzyć nową recepturę, Twój rekord zostanie dodany do tabeli receptur i pokaże następujący wynik -

Możesz zobaczyć opcję edycji, wyświetlania i niszczenia rekordów. Więc baw się z tymi opcjami.

Można również wyświetlić listę wszystkich przepisów dostępnych w tabeli przepisów, korzystając z adresu URL http://127.0.0.1:3000/recipe/list.

Udoskonalanie modelu

Railsy oferują mnóstwo darmowej obsługi błędów. Aby to zrozumieć, dodaj kilka reguł weryfikacji do pustego modelu receptury -

Zmodyfikuj app / models / recipe.rb w następujący sposób, a następnie przetestuj swoją aplikację -

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

Te wpisy zapewnią automatyczne sprawdzenie.

  • validates_length_of - pole nie jest puste i niezbyt długie.

  • validates_uniqueness_of- zduplikowane wartości są przechwytywane. Zamiast domyślnego komunikatu o błędzie Railsów, podaliśmy tutaj niestandardowy komunikat.

Alternatywny sposób tworzenia rusztowań

Utwórz aplikację, jak pokazano powyżej i The Generated Scaffold Code jak pokazano niżej

rails g scaffold Recipe tittle:string instructions:text

Powyższy kod generuje pliki auto z bazą danych przy użyciu z sqlite3 z tytułem i kolumną z instrukcjami, jak pokazano poniżej.

musimy przeprowadzić migrację bazy danych przy użyciu poniższej składni.

$ rake db:migrate RAILS_ENV=development

Na koniec uruchom aplikację, używając następującego wiersza poleceń -

rails server

Wygeneruje wynik, jak pokazano powyżej obrazy wyjściowe.

Widoki

Wszystkie widoki i odpowiadające im wszystkie metody kontrolera są tworzone przez scaffold polecenia i są dostępne w katalogu app / views / recipes.

Czym różni się rusztowanie?

Jeśli przejrzałeś poprzednie rozdziały, to na pewno widziałeś, że stworzyliśmy metody listowania, pokazywania, usuwania i tworzenia danych itp., Ale rusztowanie wykonuje to zadanie automatycznie.