Ruby on Rails 2.1 - İskele
Rails uygulamaları geliştirirken, özellikle size bir veritabanındaki verilere basit bir arayüz sağlayanlar geliştirirken, genellikle iskele yöntemini kullanmak yararlı olabilir.
İskele, ucuz demo heyecanlarından daha fazlasını sağlar. İşte bazı avantajlar -
Geri bildirim almak için kullanıcılarınızın önüne hızlı bir şekilde kod alabilirsiniz.
Daha hızlı başarı ile motive oluyorsunuz.
Oluşturulan koda bakarak Rails'in nasıl çalıştığını öğrenebilirsiniz.
Yapınızı geliştirmeye hızlı bir başlangıç yapmak için iskeleyi bir temel olarak kullanabilirsiniz.
İskele Örneği
Ruby on Rails 2.0, Rails'in iskele kullanma şeklini değiştirir. İskeleyi anlamak için , adında bir veritabanı oluşturalımcookbook ve bir masa deniyor recipes. -
Boş Rails Web Uygulaması Oluşturma
Bir komut penceresi açın ve bunu oluşturmak istediğiniz yere gidin cookbookweb uygulaması. C: \ ruby kullandık. Tam dizin yapısını ve gerekli .yml dosyası MySQL veritabanını oluşturmak için aşağıdaki komutu çalıştırın .
C:\ruby> rails -d mysql cookbook
Burada kullanıyoruz -d mysqlMySQL veritabanını kullanma ilgimizi belirtme seçeneği. Kullanarak oracle veya postgress gibi diğer herhangi bir veritabanı adını belirleyebiliriz-dseçeneği. Varsayılan olarak Rails,SQLite veri tabanı.
Veritabanını Kurmak
İşte veritabanı oluşturmanın yolu -
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)
Rails'e veritabanını bulması talimatını vermek için ~ \ cookbook \ config \ database.yml yapılandırma dosyasını düzenleyin ve veritabanı adını yemek kitabı olarak değiştirin. Bitirdiğinizde aşağıdaki gibi görünmelidir -
development:
adapter: mysql
encoding: utf8
database: cookbook
username: root
password: password
host: localhost
test:
adapter: mysql
encoding: utf8
database: cookbook
username: root
password: password
host: localhost
production:
adapter: mysql
encoding: utf8
database: cookbook
username: root
password: password
host: localhost
NOTE - MySQL dışında başka bir veritabanını kullanmak istemeniz durumunda, diğer veritabanı bağdaştırıcıları için benzer ayarları kullanabilirsiniz.
Rails, farklı veritabanları kullanarak geliştirme modunda, test modunda veya üretim modunda çalışmanıza olanak tanır. Bu uygulama her biri için aynı veritabanını kullanır.
Veritabanı Tablosu Tanımı
Bizim için aşağıdaki yapıyı varsayarsak recipes tablo -
id INT(11)
title VARCHAR(40)
chef VARCHAR(40)
instructions VARCHAR(255)
Oluşturulan İskele Kodu
İle iskele eylem, Raylar dinamik ihtiyaç duyduğu tüm kodu oluşturur. Scaffold'u komut dosyası olarak çalıştırarak , modeli, artı iskeleyi ve gereken veritabanı geçiş komut dosyasının yanı sıra bir denetleyici, yardımcı ve test destek dosyalarını aşağıdaki gibi oluşturun -
cookbook> ruby script/generate scaffold Recipe title:string \
chef:string instructions:text
Çoğul bir tablo adı tarifleri oluşturmak için tekil bir ad tarifi not edin . Ancak, yukarıdaki komut aşağıdaki mesajları oluşturacaktır -
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/recipes
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/recipes/index.html.erb
create app/views/recipes/show.html.erb
create app/views/recipes/new.html.erb
create app/views/recipes/edit.html.erb
create app/views/layouts/recipes.html.erb
create public/stylesheets/scaffold.css
create app/controllers/recipes_controller.rb
create test/functional/recipes_controller_test.rb
create app/helpers/recipes_helper.rb
route map.resources :recipes
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/recipe.rb
create test/unit/recipe_test.rb
create test/fixtures/recipes.yml
create db/migrate
create db/migrate/20080614192220_create_recipes.rb
cookbook>
Şimdi sahnenin arkasında neler olduğunu inceleyelim.
Kontrol eden, denetleyici
Denetleyicinin arkasındaki koda bakalım. Bu kod,scaffoldjeneratör. App / controllers / recipe_controller.rb'yi açarsanız, aşağıdaki gibi bir şey bulacaksınız -
class RecipesController < ApplicationController
# GET /recipes
# GET /recipes.xml
def index
@recipes = Recipe.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @recipes }
end
end
# GET /recipes/1
# GET /recipes/1.xml
def show
@recipe = Recipe.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @recipe }
end
end
# GET /recipes/new
# GET /recipes/new.xml
def new
@recipe = Recipe.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @recipe }
end
end
# GET /recipes/1/edit
def edit
@recipe = Recipe.find(params[:id])
end
# POST /recipes
# POST /recipes.xml
def create
@recipe = Recipe.new(params[:recipe])
respond_to do |format|
if @recipe.save
flash[:notice] = 'Recipe was successfully created.'
format.html { redirect_to(@recipe) }
format.xml { render :xml =>
@recipe, :status => :created, :location => @recipe }
else
format.html { render :action => "new" }
format.xml { render :xml =>
@recipe.errors, :status => :unprocessable_entity }
end
end
end
# PUT /recipes/1
# PUT /recipes/1.xml
def update
@recipe = Recipe.find(params[:id])
respond_to do |format|
if @recipe.update_attributes(params[:recipe])
flash[:notice] = 'Recipe was successfully updated.'
format.html { redirect_to(@recipe) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @recipe.errors,
:status => :unprocessable_entity }
end
end
# DELETE /recipes/1
# DELETE /recipes/1.xml
def destroy
@recipe = Recipe.find(params[:id])
@recipe.destroy
respond_to do |format|
format.html { redirect_to(recipes_url) }
format.xml { head :ok }
end
end
end
Bu dosya, otomatik olarak uygulanan tüm yöntemlere sahiptir. Bu mevcut yöntemleri kullanarak herhangi bir Oluşturma, Okuma, Silme veya Düzenleme işlemini gerçekleştirebilirsiniz.
Bir Rails uygulamasının bir kullanıcısı bir eylem seçtiğinde, ör. "Göster" - denetleyici uygun bölümde herhangi bir kodu çalıştırır - "def show" - ve daha sonra varsayılan olarak aynı ada sahip bir şablon - "show.html" oluşturur .erb ". Bu varsayılan davranış, herhangi bir şablondaki kodun üzerine yazılarak üzerine yazılabilir. -
Denetleyici, verileri veritabanı tablolarına / tablolarından taşımak için find, find_all, new, save, update_attributes ve destroy gibi ActiveRecord yöntemlerini kullanır . Herhangi bir SQL ifadesi yazmanız gerekmediğini unutmayın, Rails bunu otomatik olarak halleder.
Görünümler
Tüm görünümler ve karşılık gelen denetleyici yöntemleri, scaffoldkomutu ve app / views / recipe dizininde mevcuttur. Bu dizinde aşağıdaki dosyalara sahip olacaksınız -
index.html.erb - Bu, varsayılan sayfayı gösteren şablon dosyasıdır ve http://127.0.0.1:3000/recipes yazdığınızda çalıştırılacaktır.
new.html.erb - Bu, yeni bir tarif oluşturmak için kullanılan şablondur ve yeni bir tarif oluşturmaya çalıştığınızda uygulanacaktır.
show.html.erb - Bu, veritabanınızdaki tüm tarifleri gösteren şablondur ve tüm tarifleri görmeye çalıştığınızda uygulanacaktır.
edit.html.erb - Bu, veritabanınızdaki herhangi bir tarifi düzenlemek için kullanılan şablondur ve herhangi bir tarifi düzenlemeye çalıştığınızda çalıştırılır.
Bu dosyaları tek tek açmanızı ve kaynak kodlarını anlamaya çalışmanızı öneririz.
Göçler
İçinde oluşturulmuş bir geçiş dosyası bulacaksınız. ~/cookbook/db/migratealt dizin. Bu dosya aşağıdaki içeriğe sahip olacak -
class CreateRecipes < ActiveRecord::Migration
def self.up
create_table :recipes do |t|
t.string :title
t.string :chef
t.text :instructions
t.timestamps
end
end
def self.down
drop_table :recipes
end
end
Veritabanınızda gerekli dosyayı oluşturmak için, aşağıdaki gibi yardımcı komut dosyasını kullanın.
cookbook> rake db:migrate
Bu komut oluşturacak recipes ve schema_migrations senin içindeki masalar cookbookveri tabanı. Devam etmeden önce, lütfen gerekli tablonun veritabanınızda başarıyla oluşturulmuş olduğundan emin olun.
Teste Hazır
Yukarıdaki tüm adımlar veritabanı tablonuzu hayata geçirir. Verilerinize basit bir arayüz ve şu yolları sağlar:
- Yeni girişler oluşturma
- Mevcut girişleri düzenleme
- Mevcut girişleri görüntüleme
- Mevcut girişleri yok etmek
Bir girdi oluştururken veya düzenlerken, scaffold form oluşturma ve işlemenin tüm zor işlerini halledecektir. Aşağıdaki girdi türlerini destekleyen akıllı form üretimi bile sağlayacaktır -
- Basit metin dizeleri
- Metin alanları (veya büyük metin blokları)
- Tarih seçiciler
- Tarih-saat seçicileri
Şimdi, yemek kitabı dizinine gidin ve aşağıdaki komutu kullanarak Web Sunucusunu çalıştırın -
cookbook> ruby script/server
Şimdi bir tarayıcı açın ve http://127.0.0.1:3000/recipes/new adresine gidin. Tarifler tablosunda yeni girişler oluşturmanız için size bir ekran sağlayacaktır. Aşağıda bir ekran görüntüsü gösterilmektedir -
Şimdi, verilen metin kutularına bazı değerler girin ve yeni bir tarif oluşturmak için Oluştur düğmesine basın. Kaydınız tarifler tablosuna eklenir ve aşağıdaki sonucu gösterir -
Ya kullanabilirsiniz Edit tarifi veya BackÖnceki sayfaya gitmek için düğmesine basın. Bastığınızı varsayarakBackdüğmesi, veritabanınızda bulunan tüm tarifleri gösterecektir. Veritabanımızda yalnızca bir kaydımız olduğundan, size aşağıdaki ekranı gösterecektir -
Bu ekran size tarif tablosunun tüm ayrıntılarını görme seçeneği sunar. Ek olarak, tabloyu düzenlemek ve hatta silmek için seçenekler sunar.
Modeli Geliştirmek
Rails size ücretsiz olarak birçok hata işleme olanağı sunar. Bunu anlamak için boş tarif modeline bazı doğrulama kuralları ekleyin -
Değiştir ~/cookbook/app/models/recipe.rb aşağıdaki gibi ve ardından uygulamanızı test edin -
class Recipe < ActiveRecord::Base
validates_length_of :title, :within => 1..20
validates_uniqueness_of :title, :message => "already exists"
end
Bu girişler aşağıdaki gibi otomatik kontroller sağlayacaktır:
validates_length_of - Alan boş değil ve çok uzun değil.
validates_uniqueness_of- Yinelenen değerler yakalanır. Varsayılan Rails hata mesajı yerine özel mesajımızı verdik.
Burada, çıkan kaydı düzenlerken daha büyük bir başlık sağlamaya çalışıyoruz. Sırf yukarıdaki doğrulamaları eklediğimiz için aşağıdaki hata mesajını verir -
İskele Nasıl Farklıdır?
Önceki bölümleri geçtiyseniz, verileri listelemek, göstermek, silmek ve oluşturmak için yöntemler yarattığımızı görmüş olmalısınız, ancak iskele bu işi otomatik olarak yapar.