Ruby on Rails - Denetleyici
Rails denetleyicisi, uygulamanızın mantıksal merkezidir. Kullanıcı, görünümler ve model arasındaki etkileşimi koordine eder. Kontrolör aynı zamanda bir dizi önemli yan hizmete ev sahipliği yapmaktadır.
Harici talepleri dahili işlemlere yönlendirmekten sorumludur. İnsan dostu URL'leri son derece iyi yönetir.
Önbelleğe almayı yönetir ve bu da uygulamalara büyük ölçüde performans artışı sağlayabilir.
Kodlarını büyütmeden görünüm şablonlarının yeteneklerini genişleten yardımcı modülleri yönetir.
Oturumları yöneterek kullanıcılara uygulamalarımızla devam eden bir etkileşim izlenimi verir.
Bir denetleyici oluşturma süreci çok kolaydır ve bir model oluşturmak için zaten kullandığımız sürece benzer. Burada sadece bir kontrolör yaratacağız -
library\> rails generate controller Book
Kitabı büyük harfle yazdığınıza ve tekil formu kullandığınıza dikkat edin. Bu, her denetleyici oluşturduğunuzda izlemeniz gereken bir Rails paradigmasıdır.
Bu komut, aşağıdakilerle ilgili olan birkaç görevi yerine getirir -
Adlı bir dosya oluşturur app/controllers/book_controller.rb
Book_controller.rb'ye bakarsanız, aşağıdaki gibi bulacaksınız -
class BookController < ApplicationController
end
Denetleyici sınıfları , denetleyiciler klasöründeki diğer dosya olan ApplicationController'dan devralır :application.rb.
ApplicationController tüm denetleyicileri çalıştırılabilir kod içeriyor ve Raylar devralır ActionController :: Taban sınıfının.
Henüz ApplicationController ile endişelenmenize gerek yok, bu yüzden sadece birkaç yöntem saplaması tanımlayalımbook_controller.rb. İhtiyaçlarınıza bağlı olarak, bu dosyada istediğiniz sayıda işlevi tanımlayabilirsiniz.
Dosyayı aşağıdaki gibi görünecek şekilde değiştirin ve değişikliklerinizi kaydedin. Bu yöntemlere hangi adı vermek istediğinizin size bağlı olduğunu unutmayın, ancak ilgili isimleri vermek daha iyidir.
class BookController < ApplicationController
def list
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def delete
end
end
Şimdi tüm yöntemleri tek tek uygulayalım.
Liste Yöntemini Uygulama
Liste yöntemi size veritabanındaki tüm kitapların bir listesini verir. Bu işlevsellik aşağıdaki kod satırları ile elde edilecektir. Book_controller.rb dosyasında aşağıdaki satırları düzenleyin.
def list
@books = Book.all
end
@Books = Book.all liste yönteminde çizgi kitaplar masa aramak ve onu @books örnek nesne bulduğu her satır saklamak için Rails söyler.
Gösteri Yöntemini Uygulama
Gösteri yöntemi, tek bir kitapta yalnızca daha fazla ayrıntı görüntüler. Bu işlevsellik aşağıdaki kod satırları ile elde edilecektir.
def show
@book = Book.find(params[:id])
end
Gösteri yönteminin @book = Book.find (params [: id]) satırı, Rails'e yalnızca params [: id] 'de tanımlanan kimliğe sahip kitabı bulmasını söyler.
Params nesnesi, yöntem çağrıları arasında değerleri aktarmanıza olanak tanıyan bir kapsayıcıdır. Örneğin, liste yöntemiyle çağrılan sayfadayken, belirli bir kitap için bir bağlantıya tıklayabilirsiniz ve o kitabın kimliğini params nesnesi aracılığıyla geçirir, böylece şov belirli kitabı bulabilir.
Yeni Yöntemin Uygulanması
Yeni yöntem, Rails'in yeni bir nesne oluşturacağınızı bilmesini sağlar. Yani bu yönteme aşağıdaki kodu eklemeniz yeterlidir.
def new
@book = Book.new
@subjects = Subject.all
end
Kullanıcı girdisi almak için kullanıcıya bir sayfa görüntülediğinizde yukarıdaki yöntem çağrılacaktır. Burada ikinci satır tüm konuları veritabanından alır ve onları @subjects adlı bir diziye yerleştirir.
Oluşturma Yöntemini Uygulama
HTML formunu kullanarak kullanıcı girişi aldıktan sonra, veritabanına bir kayıt oluşturma zamanı gelmiştir. Bunu başarmak için book_controller.rb içindeki oluşturma yöntemini aşağıdakilerle eşleşecek şekilde düzenleyin -
def create
@book = Book.new(book_params)
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.all
render :action => 'new'
end
end
def book_params
params.require(:books).permit(:title, :price, :subject_id, :description)
end
İlk satır, kullanıcının gönderdiği verilerden oluşturulan bir Kitap nesnesini tutan @ kitap adında yeni bir örnek değişkeni oluşturur. book_params yöntem, nesneden tüm alanları toplamak için kullanılır :books. Veriler, params nesnesi kullanılarak oluşturmak için yeni yöntemden aktarıldı.
Sonraki satır, kullanıcıyı şuraya yönlendiren koşullu bir ifadedir. listnesne veri tabanına doğru kaydederse yöntem. Kaydedilmezse, kullanıcı yeni yönteme geri gönderilir. Redirect_to yöntemi, bir web sayfasında meta yenileme yapmaya benzer: sizi herhangi bir kullanıcı etkileşimi olmadan otomatik olarak hedefinize yönlendirir.
Daha sonra @subjects = Subject.all , verileri başarılı bir şekilde kaydetmemesi ve yeni seçenekte olduğu gibi benzer bir durum olması durumunda gereklidir.
Düzenleme Yöntemini Uygulama
Düzenleme yöntemi, gösterim yöntemiyle neredeyse aynı görünüyor. Her iki yöntem de kimliğine bağlı olarak tek bir nesneyi almak ve bir sayfada görüntülemek için kullanılır. Tek fark, gösteri yönteminin düzenlenebilir olmamasıdır.
def edit
@book = Book.find(params[:id])
@subjects = Subject.all
end
Bu yöntem, kullanıcı tarafından değiştirilecek ekranda verileri görüntülemek için çağrılacaktır. İkinci satır tüm konuları veritabanından alır ve bunları @subjects adlı bir diziye yerleştirir.
Güncelleme Yöntemini Uygulama
Bu yöntem, kullanıcı bir veriyi değiştirdiğinde ve değişiklikleri veritabanında güncellemek istediğinde, düzenleme yönteminden sonra çağrılacaktır. Güncelleme yöntemi oluşturma yöntemine benzer ve veritabanındaki mevcut kitapları güncellemek için kullanılacaktır.
def update
@book = Book.find(params[:id])
if @book.update_attributes(book_param)
redirect_to :action => 'show', :id => @book
else
@subjects = Subject.all
render :action => 'edit'
end
end
def book_param
params.require(:book).permit(:title, :price, :subject_id, :description)
end
Update_attributes yöntemi, create tarafından kullanılan kaydetme yöntemine benzer, ancak veritabanında yeni bir satır oluşturmak yerine, mevcut satırın özniteliklerinin üzerine yazar.
Daha sonra @subjects = Subject.all satırı, veriyi başarılı bir şekilde kaydetmemesi durumunda gereklidir, ardından düzenleme seçeneğine benzer hale gelir.
Silme Yöntemini Uygulama
Veritabanından bir kaydı silmek istiyorsanız, bu yöntemi kullanacaksınız. Bu yöntemi aşağıdaki gibi uygulayın.
def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
İlk satır, params nesnesi aracılığıyla iletilen parametreye göre sınıflandırılmış olanı bulur ve ardından yok etme yöntemini kullanarak siler. İkinci satır, kullanıcıyı bir redirect_to çağrısı kullanarak liste yöntemine yeniden yönlendirir.
Konuları Göstermek İçin Ek Yöntemler
Kullanıcılarınıza belirli bir konuya göre tüm kitaplara göz atmaları için bir olanak vermek istediğinizi varsayın. Böylece, tüm konuları görüntülemek için book_controller.rb içinde bir yöntem oluşturabilirsiniz. Yöntem adının olduğunu varsayalımshow_subjects -
def show_subjects
@subject = Subject.find(params[:id])
end
Sonunda senin book_controller.rb dosya aşağıdaki gibi görünecektir -
class BooksController < ApplicationController
def list
@books = Book.all
end
def show
@book = Book.find(params[:id])
end
def new
@book = Book.new
@subjects = Subject.all
end
def book_params
params.require(:books).permit(:title, :price, :subject_id, :description)
end
def create
@book = Book.new(book_params)
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.all
render :action => 'new'
end
end
def edit
@book = Book.find(params[:id])
@subjects = Subject.all
end
def book_param
params.require(:book).permit(:title, :price, :subject_id, :description)
end
def update
@book = Book.find(params[:id])
if @book.update_attributes(book_param)
redirect_to :action => 'show', :id => @book
else
@subjects = Subject.all
render :action => 'edit'
end
end
def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
def show_subjects
@subject = Subject.find(params[:id])
end
end
Şimdi denetleyici dosyanızı kaydedin.
Sırada ne var?
Arka uçta çalışacak neredeyse tüm yöntemleri oluşturdunuz. Daha sonra eylemler için yollar (URL'ler) tanımlayacağız.