Laboratorium nr 3 Podstawy Ruby on Rails



Podobne dokumenty
EPI: Interfejs Graczny Podstawy Ruby on Rails

Programowanie w Ruby

Programowanie w Ruby

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Programowanie w Ruby

Testowanie aplikacji. Kurs języka Ruby

Kurs języka Ruby. Ruby on Rails ActionPack

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Podstawowe wykorzystanie Hibernate

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Ruby i Ruby on Rails. Mateusz Drożdżyński

Zaawansowany kurs języka Python

Wdrożenie modułu płatności eservice. dla systemu Magento

Przepis 1. Edycja formularza w miejscu 13. Rails sprawia, że edycja w miejscu jest prosta dzięki kontrolce script.aculo.us

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji src/ - folder zawiera cały kod PHP aplikacji

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji Można wybrać sposób zapisu konfiguracji: YML, XML, PHP

Projektowanie systemów baz danych

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

MVC w praktyce tworzymy system artykułów. cz. 1

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Programowanie w Ruby

Baza danych sql. 1. Wprowadzenie

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Baza danych i ORM mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Backend Administratora

Bazy Danych i Usługi Sieciowe

Bazy danych i usługi sieciowe

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Modele danych walidacja widoki zorientowane na model

Programowanie obiektowe zastosowanie języka Java SE

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Wprowadzenie do Doctrine ORM

Wstęp. Opis ten dotyczy wydziałów orzeczniczych.

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Wykład 5: PHP: praca z bazą danych MySQL

EPI: Interfejs Graficzny Wykład nr 8 Warstwa widoku

Paweł Cieśla. Dokumentacja projektu

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Instrukcja laboratoryjna cz.3

Laboratorium nr 1. Temat: Wprowadzenie do MySQL-a

Laboratorium 7 Blog: dodawanie i edycja wpisów

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Podstawy programowania III WYKŁAD 5

Podstawy technologii WWW

WYKORZYSTANIE WZORCA MVC W ASP.NET

Internetowe bazy danych

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Widoki zagnieżdżone, layout. 1. Wprowadzenie Repozytoria danych

Aplikacje WWW - laboratorium

Ćwiczenia 2 IBM DB2 Data Studio

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Język SQL, zajęcia nr 1

Programowanie w Ruby

Wykaz zmian w programie SysLoger

Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

Cele. Definiowanie wyzwalaczy

Ruby on Rails. Supersilnik WWW. Łukasz Włodarczyk

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Pracownia internetowa w szkole ZASTOSOWANIA

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

BAZY DANYCH LABORATORIUM. Studia niestacjonarne I stopnia

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Plan. Raport. Tworzenie raportu z kreatora (1/3)

Podstawy technologii WWW

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Dane wejściowe. Oracle Designer Generowanie bazy danych. Wynik. Przebieg procesu

Instrukcja laboratoryjna

CouchDB. Michał Nowikowski

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Ruby on rails. Wybór środowiska programistycznego lub Instalowanie Ruby on Rail framework i zapoznanie się z podstawami funkcjonowania i używania.

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Projektowanie baz danych za pomocą narzędzi CASE

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

Ruby on rails. Instalowanie Ruby on Rail framework i zapoznanie się z podstawami

CREATE USER

Tworzenie modułów. Wymagania aplikacji. Tworzenie modułów. Architektura aplikacji. controllers

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Platforma Eclipse: Pluginy, RCP oraz GEF

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Zrąb webowy dla perfekcjonistów z terminami. autor: Kamil Adamczyk

akademia androida Składowanie danych część VI

Wykład 05 Bazy danych

Transkrypt:

Laboratorium nr 3 Podstawy Ruby on Rails Elektroniczne Przetwarzanie Informacji

Plan prezentacji Utworzenie aplikacji Author Book Końcowe porządki

System do obsługi biblioteki Bardzo prosta biblioteka. Funkcjonalności: 1. zarządzanie autorami CRUD 2. zarządzanie książkami CRUD 3. uwzględnienie związku między autorami i książkami

Plan działania 1. wygenerowanie struktury aplikacji rails new library 2. uruchomienie serwera rails server 3. konfiguracja bazy danych (opcjonalne) 4. dodanie rusztowania Author rails generate scaffold author.. 5. dodanie rusztowania Book rails generate scaffold book.. 6. dodanie wyboru autora przy edycji książki 7. powiązanie modeli Book i Author has_many :books 8. uwzględnienie autora przy wyświetlaniu książki 9. usunięcie powtórzeń kodu

Tworzenie nowego projektu 1. przejdź do katalogu, w którym ma znaleźć się główny katalog projektu 2. rails new library 1 3. cd library 4. w pliku Gemfile odkomentowujemy wpis gem therubyracer 5. bundle 6. rails server -p 3300 domyślny numer portu to 3000; możemy zmienić go za pomocą opcji -p 7. otwórz przeglądarkę i wprowadź adres http://localhost:3300 1 oznacz znak zachęty nie wprowadzamy go!

Rails okno powitalne

Rails struktura katalogów app: kod źródłowy bin: skrypty aplikacji (bundle, rake, rails) config: konfiguracja db: schemat bazy danych lib: dodatkowe biblioteki log: logi public: treści statyczne test: automatyczne testy tmp: pliki tymczasowe vor: dodatki (pluginy)

Katalog app Railsy wykorzystują wzorzez projektowy Model-View-Controller i jest on odzwierciedlony w strukturze katalogów: assets zasoby: obrazki, javascript, css controllers kontrolery spajające widoki z danymi helpers metody pomocnicze wykorzystywane w widokach mailers dodatkowe moduły pomocne w wysyłaniu models klasy zawierające logikę biznesową views widoki zorganizowane w katalogach odpowiadających kontrolerom i odbieraniu poczty elektronicznej

Konfiguracja bazy danych (opcjonalne) Parametry połącznia z bazą danych określone są w pliku config/database.yml: development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000

Plan prezentacji Utworzenie aplikacji Author Book Końcowe porządki

Tworzenie rusztowania dla modelu Author Przechodzimy do katalogu libarary i generujemy rusztowanie: rails g scaffold author name:string surname:string model Author posiada atrybuty imię i nazwisko, które są łańcuchami znaków zostanie wygenerowana migracja, która dodaje do bazy danych schemat odpowiadający modelowi Author zostanie również wygenerowany podstawowy kontroler wraz z widokami do manipulowania autorami

Uruchamiamy migrację rake db:migrate == CreateAuthors: migrating =========== -- create_table(:authors) -> 0.0041s == CreateAuthors: migrated (0.0042s) == rake jest narzędziem podobnym do GNU Make, który pozwala na uruchamianie zadań, takich jak np. wywołanie migracji bazy danych aby polecenie wykonało się poprawnie trzeba być w katalogu library! polecenie powoduje zmianę schematu bazy danych zgodnie z wygenerowaną wcześniej migracją Zaglądamy pod adres http://localhost:3300/authors

Rusztowanie dla modelu Author Generator rusztowania utworzył m.in. następujące pliki: db/migrate/xxx_create_authors.rb definiuje tabelę authors app/models/author.rb dynamicznie mapuje autora do tabeli w bazie danych 2 app/controllers/authors_controller.rb definiuje akcje index, show, new, create, edit, update oraz destroy app/views/authors/* widoki w plikach html.erb 2 Uwaga: nazwa modelu jest w liczbie pojedynczej a tabeli w liczbie mnogiej.

Podgląd pliku migracji i modelu db/migrate/xxx_create_authors.rb class CreateAuthors < ActiveRecord::Migration def change create_table :authors do t t.string :name t.string :surname t.timestamps app/models/author.rb class Author < ActiveRecord::Base

Wygenerowany schemat bazy Jeśli nie było problemów z biblioteką bazy danych sqlite3 możemy zobaczyć wygenerowane tabele: sqlite3 db/development.sqlite3 SQLite version 3.6.2 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>.schema SHOW CREATE TABLE authors; CREATE TABLE `authors` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` varchar(255), `surname` varchar(255), `created_at` datetime, `updated_at` datetime ); SHOW CREATE TABLE schema_migrations; CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL);

Podgląd pliku rusztowania Otwieramy plik app/controllers/authors_controller.rb. class AuthorsController < ApplicationController before_action :set_author, only: [:show, :edit, :update, :destroy] # GET /authors # GET /authors.json def index @authors = Author.all # GET /authors/1 # GET /authors/1.json def show # GET /authors/new def new @author = Author.new # GET /authors/1/edit def edit #...

Podgląd widoków i efekt końcowy Otwieramy plik app/views/authors/show.html.erb. <p id="notice"><%= notice %> </p> <p> <strong>name:</strong> <%= @author.name %> </p> <p> <strong>surname:</strong> <%= @author.surname %> </p> <%= link_to Edit, edit_author_path(@author) %> <%= link_to Back, authors_path %>

Plan prezentacji Utworzenie aplikacji Author Book Końcowe porządki

Tworzenie rusztowania dla modelu Book W katalogu głównym (library): rails g scaffold book title:string author:references następnie rake db:migrate Oglądamy wynik pod adresem: http://localhost:3300/books Coś jest jednak nie tak z autorem!

Zmiana sposobu tworzenia książek Modyfikujemy plik app/views/books/_form.html.erb. Zastępujemy: <%= f.text_field :author_id %> przez: <%= f.select :author_id, @authors %>

Zmiana sposobu tworzenia książek cd. Dodajemy poniższy kod na początku pliku app/controllers/books_controller.rb: class BooksController < ApplicationController before_action :set_book, only: [:show, :edit, :update, :destroy] # tę linię dodajemy before_action :set_authors, only: [:new, :edit, :update, :create] # GET /books #... oraz na jego końcu (przed słowem kluczowym!): def set_authors @authors = Author.all.map do author [ author.name + " " + author.surname, author.id] Teraz zaglądamy pod http://localhost:3300/books/new

Wyświetlanie szczegółów książki Zmieniamy widok książki app/views/books/show.html.erb: <p id="notice"><%= notice %> </p> <p> <strong>title:</strong> <%= @book.title %> </p> <p> <strong>author:</strong> <%= @book.author.name + " " + @book.author.surname %> </p> <%= link_to Edit, edit_book_path(@book) %> <%= link_to Back, books_path %> Teraz oglądamy szczegóły książki!

Plan prezentacji Utworzenie aplikacji Author Book Końcowe porządki

Usuwanie powtórzeń kodu (DRY!) Aby wyświetlić imię i nazwisko autora, w plikach books_controller.rb oraz show.html.erb użyliśmy podobnego kodu. Było to po prostu połączenie imienia i nazwiska w jeden łańcuch. Aby usunąć to powtórzenie zdefiniujemy nową metodę w modelu Author, która będzie działać jak wirtualny atrybut. Dodajmy zatem metodę full_name w pliku app/models/author.rb: class Author < ActiveRecord::Base def full_name "#{self.name} #{self.surname}"

Usuwanie powtórzeń cd. W modelu book.rb dodajemy również metodę author_full_name. Zabezpieczy nas ona przed książkami, które nie mają autora. class Book < ActiveRecord::Base belongs_to :author def author_full_name if self.author self.author.full_name else "Autor nieznany"

Usuwanie powtórzeń cd. Następnie w show.html.erb zastępujemy: <%= @book.author.name + " " + @book.author.surname %> przez: <%= @book.author_full_name %> A w books_controller.rb zastępujemy: @authors = Author.all.map do author [ author.name + " " + author.surname, author.id] przez: @authors = Author.all.map do author [ author.full_name, author.id] Teraz sprawdzamy czy wszystko działa jak należy!

Uzupełnienie związku w modelu Author Zaglądamy do app/models/book.rb: class Book < ActiveRecord::Base belongs_to :author #... Dzięki zastosowaniu author:references przy generowaniu szkieletu, zdefiniowana jest relacja wiele-do-jednego pomiędzy książką a autorem. Informację o tej relacji musimy jednak również dodać do modelu Author: class Author < ActiveRecord::Base has_many :books def full_name "#{self.name} #{self.surname}"

Zadanie Zmodyfikuj listing książek tak aby zawierał imię i nazwisko autora. Zmodyfikuj widok szczegółów autora tak aby zawierał listę napisanych przez niego książek. Zmodyfikuj listing autorów, tak aby zawierał liczbę napisanych książek.

Ruby on Rails materiały Dokumentacja: http://apohllo.pl/dydaktyka/interfejsy/rails http://guides.rubyonrails.org/ Rails Guides http://www.rubydoc.info/docs/rails/frames działa szykbo i jest aktualna Edytory: Vim + Rails plugin (w pracowniach) Aptana RadRails NetBeans + Ruby plugin RubyMine (płatny) Sublime2 (płatny)

Podziękowania dla: Agnieszki Figiel, za udostępnienie prezentacji w postaci plików źródłowych Marka Kowalcze oraz Jakuba Kuźmy z grupy SRUG (srug.pl), za pomoc przy kolorowaniu składniu w Latex u