Ruby-on-rails-rails-controllers
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)を定義します。