ruby on railsのお勉強をして焼く2ヶ月、やっとMVCとか分かってきたのでまとめてみます。あ、しめさばです。
詳しい人からみたら全然違うかもしれませんが、まぁ理解の整理ということでね。
MVCモデルとは
Webアプリケーション等のプログラムで、データのやり取りや操作の流れをについて、それぞれ役割を分けて管理しようというモデルで、具体的には
Model
DB関連の処理を担当
View
画面表示(HTML)を担当
Controller
ユーザーのリクエストの受付、レスポンス返却
というように役割ごとの記述を行い、全体的な管理のしやすさを担保する仕組みという感じでしょうか。
処理の流れ
ユーザーからURL等のリクエストを受け取ったらまずは
Router
というところで、どのviewでどのcontrollerのアクションを実行すべきかという事を割当処理を実行する。
だから、『MVCモデル+ルーティング』というのが本当は適切なんじゃないかなぁと思ったり
ルーターによって、アクションを呼び出す、そこで使っているデータについてModelを通してDBにアクセスして、必要な情報をControllerに返す。
帰ってきた情報をControllerからViewに渡して、画面表示をする(HTML)。
Railsの命名規則
クラス名:キャメルケース(スペース無し、大文字と小文字)
それ以外:スネークケース(スペース部分をアンダーバーで代用)
例外として定数は全て大文字で表現
routes.rbの書き方
RubyOnRailsで開発をする時、『まずはルーティング』を設定する。
※routes.rbはconfig下にあります。
Rails.applocation.routes.drow do
# ここからendまでがrouting
get '/', to: 'top#index'
end
となっている時
get → HTTPメソッドで、getとかpostのそれ
‘/’ → 指定のURL
to以下 → controllerのアクション指定
今回は’top#index’なので、topコントローラーのindexアクションを指定するということ。
つまり、ルートディレクトリを指定されたら、topコントローラーの中にあるindexアクションの指定通り、DBのデータを確認してね。ってこと。
次はcontroller
contorollerファイルの場所は
app > controllers の中にあります。
今回の場合は『topコントローラーのindexアクション』なので
app > controllers > top_controller.rb
※ファイルを生成するときは
rails generate controller うんぬん
みたいなコマンド入力が必要だけど割愛。
class TopControkker < ActionController::Base
# ↓これが『topコントローラーのindexアクション』
def index
end
end
次はview
viewファイルの場所は
app > views の中にあって
今回の場合は『topコントローラーのindexアクション』を呼び出しているので
app > vies > top > index.html.erb
※ touch コマンドで作る方法は割愛
<h1>Hello</h1>
これで一応、ブラウザに『Hello』とだけ表示されるものが完成する。
※dbの呼び出しをしていないのでmodelは不要
modelをデータに接続してみる
接続設定は
config > database.yml
で行うが今回はsqlite3を使うのでいじる必要無し
modelを作成する
コマンドは
rails g model User name:string age:integer
でUserというDBを作成しnameとageのカラムを生成する。
そうすると
migrateファイル(テーブル構成を定義する)
modelファイル(dbを操作するためのファイル)
が出来る。
次に、作ったファイルをもとにをsqlite3にdbを生成する。
コマンドは
rails db:create
次にテーブルにmigrateファイルを元にdbに反映する
コマンドは
rails db:migrate
※dbそのものは『users』と複数形で生成される点に注意
modelファイルの使い方
ファイルの場所は
app > models >users.rb
ファイルの中身はこんな感じ
class User < ApplicationRecord
end
※継承元のActiveRecordはrubyのコマンドでsqlを動かすコマンドに変換するものとおぼえておく。
ユーザー情報をviewに表示させる
まずルーティングを変更する
Rails.applocation.routes.drow do
# ここからendまでがrouting
get '/', to: 'top#index'
get '/users/:id', to: 'users#show', as: "user"
end
コントローラーを作成する
class UsersController < ActionController::Base
def show
@user = User.find(params["id"])
end
end
ルーティングで設定している
‘/users/:id’ の :id の変数を受け取るには
params[“id”]
で指定する。
だからuserモデルのidを受け取るのは
User.find(params[“id”])
そしてviewに変数を渡す時は@をつけて
@user という変数に渡す。
※app > vies > user > show.html.erb
<h1>ユーザー詳細,/h1>
<%= @user.name %><br>
<%= @user.age %>才
rubyのコードをhtmlに記入する時は
<% %> 画面に表示されない
<%= %> 画面に表示される
で挟んで使う。
こんな感じ。
![]() |
![]() |
---|
コメント