Rails 新しいviewを追加する方法

Ruby on Rails

railsではindex、show、create、new、edit、show、update、destroyの7つのアクションが自動で生成されます。

では、これ以外にviewを作りたいのだけどどうするの?と思い調べながらやってみたら作れたので忘れないように書いておきたいと思います。

ドットインストールのレッスンを全て終えた状態からスタートします。
今回はindexfinishといviewを新しく作りました。

1.Controlerに新しくアクションを追加する
以下のようにPostsControllerにアクションに以下赤太字を追加しました。
def indexfinish
end

class PostsController < ApplicationController

def index
@post = Post.all.order(created_at:'desc')
end
・
・
中略
・
・
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to posts_path
end

def indexfinish
end

private
def post_params
params.require(:post).permit(:title, :body)
end

end

2.viewファイルを作成する
viewフォルダにindexfinish.html.erbを追加する。
適当にhtmlを書いておきます。

cakePHPであればこれだけ用意すれば/posts/indexfinishでviewを表示させることができたのですがrailsではroutes.rbに記述することが必要です。

3.ルーティン(routes.rb)に赤太字を追加する
collection do
get ‘indexfinish’
end

config/routes.rbを開いて赤太字を追加する

Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

resources :posts do
resources :comments, only: [:create, :destroy]

collection do
get 'indexfinish'
end

end

root 'posts#index'


end

ターミナルでルーティンぐを確認するとindexfinishが追加されています。
$ rails routes
※対象ディレクトリに移動していることを忘れずに

サーバーに接続して確認してみます!
$ rails server -b $IP -p $PORT
※ターミナルは別のものを開いて使いましょう

できた!!

 

【メモ】
いろんなサイトを見ていて勉強になったことがあったのでついでにメモします。railsのリクエスト方法について。以下のサイトのほぼそのままなので引用表示にしています。ちなみに新しいviewの追加方法も参考にさせていただきました。公式サイトがスラスラ理解できるようになるのはいつのことやら。

作って学ぶRuby on Rails Vol.3 Actionを追加しよう!

■GET
html内で明示がない限り、リクエストはGETとして送信される。ブラウザから直接URLを指定してアクセスした際も同様にGETとして送信される。リクエストにはパラメータ(引数)を指定することができる。GETリクエストで送信できる情報量には制限があり、サーバーの種類により制限文字数に違いがあるが、基本的には2000文字程度と考えて問題ない。
■POST
html内のformタグなどから明示的にPOSTとしてリクエストしない限り、POSTでリクエストされることはない。RubyonRailsでは、formタグの生成に関して作法がある。POSTで送信できる情報量には基本的に制限はないが、サーバーの設定により制限されている場合がある。
■GETとPOSTの使い分け
GETは、検索結果を表すページなどに使う。
POSTはユーザ名やパスワードなど秘匿性の高い情報を送信する際を代表に、セキュリティの観点から利用する。なおPOSTを利用したからセキュリティに問題がないわけではなく、GETよりはリスクが軽減されるだけで、セキュリティ対策は別途必要となる。config/routes.rbに追記した1行もgetと記述しているので、GETリクエストとして受け取ることになる。

cakePHPにも似たような送信方式があります。cakePHPではその都度どちらかを記載しておきます(たぶん。。。)
POST形式 … フォームのデータを本文として送信します(一度に大量のデータを送信することができます)
GET形式 … フォームのデータをURLの末尾に追加して送信します(送信できるデータ量には制限があります)

他、参考サイト。そのまんまですがルーティンぐにアクション追加を参考にしました。
ルーティングにアクションを追加

 

ここまで一気に書いたら手が痺れて震えてきました。弱いのかな😔
そろそろ子供たちと旦那が帰ってきそう。終わらせることができて良かった😊😊
お昼ご飯作ろう!

コメント

タイトルとURLをコピーしました