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.