Ruby on Rails まとめ②
投稿ページ作成
①ルーティングを記載
config/routes.rb 編集
Rails.application.routes.draw do
get 'posts', to: 'posts#index'
# 新規投稿ページを表示するリクエストに対応
get 'posts/new', to: 'posts#new'
end
②コントローラーを設定
app/controllers/posts_controller.rb
# index下に追記
def new
end
③ビューファイル作成
app/views/posts/new.html.erb を作成。
<h1>新規投稿ページ</h1>
④ブラウザで確認
http://localhost:3000/posts/new
ヘルパーメソッド
主にviewでHTMLタグを出現させたりテキストを加工するために予め用意されたメソッド。複雑なアプリケーションでは、コードがシンプルになる。
フォームでは、使用しないとセキュリティ上の問題が発生する。
form_tag 投稿ページなどにおけるフォームの実装
link_to リンクの実装
simple_format 投稿した文章を自動で見やすく整形する
# HTMLのみでのフォーム記述
<form action="/posts" method="post">
<input type="text" name="content">
<input type="submit" value="投稿する">
</form>
# ヘルパーメソッドを用いたフォーム記述
<%= form_tag('/posts', method: :post) do %>
<input type="text" name="content">
<input type="submit" value="投稿する">
<% end %>
上記フォームの解説
/posts ルーティングのURIパターン。
method: :post HTTPメソッド。
do と end の間がフォームですよと指定している。
type="text" はテキストを入力するタイプのフォームを指定。
name="content" は入力された文字列が、どのような名称で扱うか指定。
type="submit" 送信ボタン
value="投稿する" 送信ボタンに入るメッセージを指定
・typeの例
type="text" 1行テキストボックス
type="password" パスワード入力ボックス
(アスタリスクなどに置き換えて表示される)
type="checkbox" チェックボックス(複数選択可能)
type="radio" ラジオボタン(複数の中から一つしか選択できない)
type="submit" 送信ボタン
・link_to メソッド
<%= link_to 'リンクに表示する文字', 'リンク先のURL' %>
app/views/posts/index.html.erb に追記。
# indexからnewに遷移。
<%= link_to '新規投稿', '/posts/new' %>
投稿する
①ルーティングを記載
config/routes.rb 編集
Rails.application.routes.draw do
get 'posts', to: 'posts#index'
get 'posts/new', to: 'posts#new'
# データの投稿を行うリクエストに対応
post 'posts', to: 'posts#create'
end
②コントローラーを設定
・params
サービス利用者がサーバに対して送る値を格納するための箱。
・ストロングパラメーター
指定したキーを持つパラメーターのみを受け取るようにする。
【例】
def post_params
params.permit(:キー名, :キー名) # 受け取りたいキーを指定
end
・プライベートメソッド
クラス外から呼び出すことのできないメソッド。Classの外部から呼び出されてしまうとエラーを起こすメソッドもある。エラーを事前に防ぐ。
【例】
private
def private_method # プライベートメソッド
(処理)
end
app/controllers/posts_controller.rb
# new下に追記。()には、実際にテーブルに登録したいデータを記載。
def create
Post.create(post_params)
end
private
def post_params
params.permit(:content)
end
③ビューファイル作成
app/views/posts/create.html.erb を作成。
<h1>投稿完了!!</h1>
<%= link_to 'トップページに戻る', '/posts' %>