
Rails7つのアクションとは?
前回MVCモデルをまとめている時にRails7つのアクションに
触れていませんでした。
前回の記事 → https://note.com/john01/n/nb3888c1efb20
『7つのアクション』とはControllerに記述する時に使用します。
このアクション名だったらこんな処理をするだろうなと
後から見た時に分かりやすくなり可読性が上がります
7つのアクション一覧
・index・・・一覧表示
・show・・・詳細表示
・new・・・新規作成画面
・create・・・新規作成情報を定着させる
・edit・・・編集画面
・update・・・編集情報を定着
・destroy・・・削除
1つ目のアクション(index)
サイトのトップページを作成する時に使用するアクション
とりあえずページ表示させようと思ったら
controllerにindexアクション書いて
routes.rbにパス通してviewsにindex.html作成すればOK
rails g controller home index
ちなみにcontroller作成時にindex等、アクション名をつけてあげると
routes.rbにパス通してくれて、Viewsにindexファイルを作ってくれます。
こんな感じですね。SCSSファイルまで作ってくれました。
2つ目のアクション(show)
作成したトップページから詳細なページを作成したい時に使用
例えばユーザーが投稿した内容のうち
画像だけが一覧ページにズラーっと並んでいて
クリックして投稿内容が見たい場合に使用します。
--app/controller/tweets_controller.rb--
def show
@tweet = Tweet.find(params[:id])
end
このような記述をすることによって投稿内容詳細ページへ飛べるようになります。あとはビューを作成すれば表示されます。
@tweetの中にはTweetテーブルのレコードが代入されているので
呼び出し先で@tweet.nameなどカラム名を指定すると
そのカラム名が表示されます。
3つ目、4つ目のアクション(new,create)
rails7つのアクションを覚える時のアハ体験です。
なかなか理解できずに苦しんでいましたが
セットで覚えてしまえば簡単だ!という結論に至りました。
ブログアプリ等で何かを投稿する時にフォームに入力すると思いますが
あれがnewアクション
そして『投稿』ボタンを押してテーブルに保存するのが
createアクションです。
今現在僕がnoteに書いているこのページはnewアクションですね。
そして、公開を押すとテーブルに保存されて
一覧に表示されるようになります。
5つ目、6つ目のアクション(edit,update)
こちらもnew,createと同じ理屈ですね。
投稿した内容を編集するのがeditアクション
そして編集した内容をデータベースへ反映させるのが
updateアクションになります。
このことからnewとeditアクションにはViewsファイルが必要な事がわかります。単純な事かもしれませんが、railsを勉強し始めの頃にこれを発見して
一気に理解度が上がりました。
7つ目のアクション(destroy)
最後はリソースを削除するアクションです。
投稿内容を削除する時に使用します。
--controller--
def destroy
tweet = Tweet.find(params[:id])
tweet.destroy
end
削除機能はビューに情報を受け渡す必要がないため
ただの変数に代入しています。
--Views--
<%= link_to '削除', "/tweets/#{tweet.user_id}", method: :delete %>
ビューに削除ボタンを作成したら最後にmethodを追加してあげないと機能しないので注意してください。
以上が7つのアクションです。
このアクションに当てはまらないなーと感じたら自作でもOKです。
ただその場合、routes.rbへの記述の仕方が少し変わります。
そんなに難しくはないので次回まとめてみます。
ここまで読んでいただきありがとうございました。
記事を書いていると理解できていない部分が浮き彫りになり
そこをググって補完しています。
『アウトプットは最高のインプット』とはよく言ったものですね。
これからも良質なインプットを定着させるためにも
アウトプットを続けていきます。