Ruby on Railsで初めてアプリを作ってみる #5 -controllerとviewの追加-
生成したリソースに対応するcontrollerを作成し、このリソースに対するviewとそのためのアクションを追加していく。
rails generate controller
controllerを作成する。controllerの名前は1文字目が大文字で、複数形を指定するのがrailsの規約である。
$ rails g controller Stocks
# rails generateコマンドは rails g と省略できる
このコマンドでcontrollerのファイルとviewのファイルが生成される。
routesの設定
railsでは config/routes
ファイルにてdispatch管理をしている。このファイルの設定でRESTfulなURLを自動生成してくれる。
今回追加したcontrollerの設定も追加する。
config/routes
に以下の行を追加する
resources :stocks
この設定により、リソースの基本的な操作を行うURLが生成される。
この他にもroutesの設定方法はいくつかあり、それにより自由にエンドポイントの追加ができるがここでは省略。
設定されているroutesの確認
routesの設定が完了したら、生成されたURLの確認をする。
$ rake routes
Prefix Verb URI Pattern Controller#Action
stocks GET /stocks(.:format) stocks#index
POST /stocks(.:format) stocks#create
new_stock GET /stocks/new(.:format) stocks#new
edit_stock GET /stocks/:id/edit(.:format) stocks#edit
stock GET /stocks/:id(.:format) stocks#show
PATCH /stocks/:id(.:format) stocks#update
PUT /stocks/:id(.:format) stocks#update
DELETE /stocks/:id(.:format) stocks#destroy
アクションの追加
$ rake routes
で示されたController#Actionに沿って、controllerにアクションを追加していく。
app/controllers/stocks_controller.rb
class StocksController < ApplicationController
before_action :set_stock, only: [:show, :edit, :update, :destroy]
# GET /stocks
# GET /stocks.json
def index
@stocks = Stock.all
end
# GET /stocks/1
# GET /stocks/1.json
def show
end
# GET /stocks/new
def new
@stock = Stock.new
end
# GET /stocks/1/edit
def edit
end
# POST /stocks
# POST /stocks.json
def create
@stock = Stock.new(stock_params)
respond_to do |format|
if @stock.save
format.html { redirect_to @stock, notice: 'Stock was successfully created.' }
format.json { render action: 'show', status: :created, location: @stock }
else
format.html { render action: 'new' }
format.json { render json: @stock.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /stocks/1
# PATCH/PUT /stocks/1.json
def update
respond_to do |format|
if @stock.update(stock_params)
format.html { redirect_to @stock, notice: 'Stock was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @stock.errors, status: :unprocessable_entity }
end
end
end
# DELETE /stocks/1
# DELETE /stocks/1.json
def destroy
@stock.destroy
respond_to do |format|
format.html { redirect_to stocks_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_stock
@stock = Stock.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def stock_params
params.require(:stock).permit(:title)
end
end