Ruby-on-rails-rails-controllers

提供:Dev Guides
移動先:案内検索

Ruby on Rails-コントローラー

Railsコントローラーは、アプリケーションの論理的な中心です。 ユーザー、ビュー、モデル間の相互作用を調整します。 コントローラーは、多くの重要な補助サービスのホームでもあります。

  • 外部リクエストを内部アクションにルーティングする責任があります。 人に優しいURLを非常にうまく処理します。
  • キャッシュを管理します。これにより、アプリケーションのパフォーマンスが大幅に向上します。
  • ヘルパーモジュールを管理します。ヘルパーモジュールは、コードを増やさずにビューテンプレートの機能を拡張します。
  • セッションを管理し、ユーザーにアプリケーションとの継続的な対話の印象を与えます。

コントローラーを作成するプロセスは非常に簡単で、モデルの作成にすでに使用したプロセスに似ています。 ここでコントローラーを1つだけ作成します-

library\> rails generate controller Book

Bookを大文字にし、単数形を使用していることに注意してください。 これは、コントローラーを作成するたびに従うべきRailsパラダイムです。

このコマンドはいくつかのタスクを実行しますが、ここでは以下が関連しています-

  • app/controllers/book_controller.rb というファイルを作成します

あなたがbook_controller.rbを見れば、あなたは次のようにそれを見つけるでしょう-

class BookController < ApplicationController
end

コントローラークラスは、_applicationController、_を継承します。これは、コントローラーフォルダー内の他のファイルである application.rb です。

_ApplicationController_には、すべてのコントローラーで実行できるコードが含まれており、Rails _ActionController
Base_クラスを継承しています。

_ApplicationController_を心配する必要はまだないので、 book_controller.rb にいくつかのメソッドスタブを定義してみましょう。 要件に基づいて、このファイルに任意の数の関数を定義できます。

ファイルを次のように変更し、変更を保存します。 これらのメソッドに付ける名前はあなた次第ですが、関連する名前を付ける方が良いことに注意してください。

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

次に、すべてのメソッドを1つずつ実装します。

listメソッドの実装

listメソッドは、データベース内のすべての書籍のリストを提供します。 この機能は、次のコード行によって実現されます。 book_controller.rbファイルの次の行を編集します。

def list
   @books = Book.all
end

listメソッドの_ @ books = Book.all_行は、Railsにbooksテーブルを検索し、見つかった各行を@booksインスタンスオブジェクトに格納するよう指示します。

showメソッドの実装

showメソッドは、単一のブックの詳細のみを表示します。 この機能は、次のコード行によって実現されます。

def show
   @book = Book.find(params[:id])
end

showメソッドの_ @ book = Book.find(params [:id])_行は、params [:id]で定義されたidを持つ本のみを検索するようにRailsに指示します。

paramsオブジェクトは、メソッド呼び出し間で値を渡すことができるコンテナです。 たとえば、listメソッドによって呼び出されるページにいるとき、特定の本のリンクをクリックすると、paramsオブジェクトを介してその本のIDが渡され、showが特定の本を見つけることができます。

新しいメソッドの実装

新しいメソッドは、新しいオブジェクトを作成することをRailsに知らせます。 したがって、このメソッドに次のコードを追加するだけです。

def new
   @book = Book.new
   @subjects = Subject.all
end

ユーザーにページを表示してユーザー入力を取得するときに、上記のメソッドが呼び出されます。 ここで、2行目はデータベースからすべてのサブジェクトを取得し、@ subjectsと呼ばれる配列に入れます。

createメソッドの実装

HTMLフォームを使用してユーザー入力を取得したら、データベースにレコードを作成します。 これを実現するには、book_controller.rbのcreateメソッドを編集して、次のものに一致させます-

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

最初の行は、ユーザーが送信したデータから作成されたBookオブジェクトを保持する@bookという新しいインスタンス変数を作成します。 book_params メソッドは、オブジェクト*:books *からすべてのフィールドを収集するために使用されます。 データは、paramsオブジェクトを使用して作成する新しいメソッドから渡されました。

次の行は、オブジェクトがデータベースに正しく保存された場合にユーザーを list メソッドにリダイレクトする条件ステートメントです。 保存されない場合、ユーザーは新しいメソッドに戻されます。 redirect_toメソッドは、Webページでメタリフレッシュを実行するのに似ています。ユーザーの操作なしで自動的に目的地に転送します。

その後、データを正常に保存できず、新しいオプションの場合と同様の場合に、_ @ subjects = Subject.all_が必要です。

editメソッドの実装

editメソッドは、showメソッドとほとんど同じように見えます。 両方のメソッドを使用して、そのIDに基づいて単一のオブジェクトを取得し、ページに表示します。 唯一の違いは、showメソッドは編集できないことです。

def edit
   @book = Book.find(params[:id])
   @subjects = Subject.all
end

このメソッドは、ユーザーが変更するデータを画面に表示するために呼び出されます。 2行目は、データベースからすべてのサブジェクトを取得し、@ subjectsという配列に入れます。

updateメソッドの実装

このメソッドは、ユーザーがデータを変更し、変更をデータベースに更新したいときに、editメソッドの後に呼び出されます。 更新方法は作成方法に似ており、データベース内の既存の本を更新するために使用されます。

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メソッドは、createで使用されるsaveメソッドに似ていますが、データベースに新しい行を作成する代わりに、既存の行の属性を上書きします。

その後、データが正常に保存されない場合に_ @ subjects = Subject.all_行が必要になり、編集オプションに似たものになります。

deleteメソッドの実装

データベースからレコードを削除する場合は、このメソッドを使用します。 このメソッドを次のように実装します。

def delete
   Book.find(params[:id]).destroy
   redirect_to :action => 'list'
end

最初の行は、paramsオブジェクトを介して渡されたパラメーターに基づいて分類を検索し、destroyメソッドを使用して削除します。 2行目は、redirect_to呼び出しを使用してユーザーをリストメソッドにリダイレクトします。

件名を表示する追加の方法

特定の主題に基づいてすべての本を閲覧するための機能をユーザーに提供するとします。 したがって、book_controller.rb内にメソッドを作成して、すべてのサブジェクトを表示できます。 メソッド名は show_subjects であると仮定します-

def show_subjects
   @subject = Subject.find(params[:id])
end

最後に、 book_controller.rb ファイルは次のようになります-

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

ここで、コントローラーファイルを保存します。

次は何ですか?

バックエンドで機能するほとんどすべてのメソッドを作成しました。 次に、アクションのルート(URL)を定義します。