MVCモデルのMとCについて
Ruby on Railsチュートリアルのメモ書き
Controller
ブラウザからのリクエストを受け取り、model・viewと連携しながら結果をブラウザに送る(レスポンス)役割を担う
【Rails controllerの具体的な役割】
ブラウザからの入力を受け取る
データをmodelに要求する
データの追加や変更をmodelに指示する
適切なviewを選ぶ
データをviewに渡す
Controllerの生成
$ rails g controller hoge(コントローラ名) top(アクション名) about(アクション名)
controllers配下にhoge_controller.rbが生成される
views配下にhogeディレクトリが生成される
views/hoge配下にアクション(top.html.erb, about.html.erb)が生成される
config/router.rbにtopとaboutへのルーティングが自動で書きこまれる
手動での追加方法
Controllerにアクションを定義することでerbファイルをURLに応じて参照することが出来るようになる
- Controllerに定義
code:controllers/hoge_controller.rb
# views/hoge/new.html.erbを参照可能にする
def new
# new.html.erbで使える変数@postsを定義
@posts = Post.all
end
viwes/hoge配下にファイルを作成
router.rbにルーティングを追記
get 'hoge/new' => 'hoge#new'
Controllerの削除
$ rails destroy controller 削除したいコントローラ名
Model
主にデータベースとのやり取りを行うクラス
Modelの生成
# モデル名は単数形にする プロパティ名と型
$ rails g model Fuga name:string country:string
app/models配下にfuga.rbが生成される
ActiveRecordを継承したHogeクラスが扱えるようになる
db/migrate配下にタイムスタンプ_create_fugas.rbが生成される
DBのデータをブラウザで表示する
DBテーブルの準備
$ rails g model Hoge name:string email:string
# DBの変更を反映するコマンド
$ rails db:migrate
rails consoleでデータを準備する
$ rails console
# データを追加
$ Fuga.create(name: "tanaka", country: "JP")
$ Fuga.create(name: "Michel", country: "US")
ControllerでDBからデータを取得・定義する
code:hoge_controller.rb
def new
@fugas = Fuga.all
end
viewに記載してレンダリングする
code:new.html.erb
<div>
<% @fugas.each do |fuga | %>
<br>
<% end %>
</div>
ブラウザからDBに登録する
createアクションを作成
code:controllers/hoge_controller.rb
def create
# viewsのtextareaのname属性から取得・登録
Fuga.create(name: params:name) # 再レンダリングするのに必要
redirect_to("/hoge/new")
end
createアクションのルーティング設定
code:routes.rb
post "hoge/new/create" => "hoge#create"
入力フォーム
code:views/hoge/new.html.erb
<%= form_tag("/hoge/new/create") do %>
<textarea name="name"></textarea>
<input type="submit" value="投稿">
<% end %>
Modelの削除
$ rails destory model 削除したいモデル