はじめに
Railsチュートリアルを一通り学びポートフォリオ作成に入る前に内容の確認兼、ポートフォリオをチュートリアルの内容を確認しながら作成できるよう大まかにまとめます。
プロフィール
プログラミング未経験 金融機関勤務 社会人3年目
web系エンジニア転職のため、2022年3月ごろにProgateを初めて触りweb制作を中心に学習。
Railsチューリアルの流れ
※ポートフォリオ作成方法にの大まかな流れ関してまとめるため、環境構築やhtml cssの具体的なコード等については省略します。
アプリ名 sample_app
コントローラ名 User
モデル
Users |
---|
id |
name |
password_digest |
remember_digest |
・アプリの新規作成とコントローラ、モデル作成
rails new sample_app
をコマンド実行し、もとになるファイルなどを作成
rails g controller Users [アクション名]
をコマンド実行し、もとになるファイルなどを作成
rails g model User name:string email:string password_digest: remember_digest:string
をコマンド実行し、モデル作成
・ルーティングの作成
root "user#home"
get '/signup', to: 'users#new'
resources :users(コントローラ名)
resouces を使うことで以下のようなルーティングを記載しなくても使える
gem "devise" を使って作成する際は重複してしまうので、showアクションなどは個別に記載する。
get 'users' => 'users#index'
get 'users/:id' => 'users#show'
get 'users/new' => 'users#new'
post 'users' => 'users#create'
get 'users/:id/edit' => 'users#edit'
patch 'users/:id' => 'users#update'
delete 'users/:id' => 'users#destroy'
・viewの作成
具体的なコードによる作成方法は割愛しますが、それぞれのview作成の際に忘れそうなこと、再確認したいことを記載しています。
・アプリによって必要なviewを作成する。
コントローラ作成の際に記載したアクション名のviewはファイルが作られているので、それ以外のviewが必要な場合は自分で作成する。(上のルーティング参考)
application.html.erb にヘッダとして各ページへのリンクを記載しておくと遷移しやすくなる。
<%= link_to "Home",root_path %>
・newアクションの入力フォーム
<%= form_with(model: @user,local: true,) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label :rank %>
<%= f.text_field :rank %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Create my account", class: "btn btn-primary" %>
・showコントローラ、view
def show
@user = User.find(params[:id])
end
URLの1 user/1 の数字の部分(ルーティングにも記載)のuser_idを持つユーザーを見つけ@userに代入
viewにて<%= @user.name %>
などとすればユーザー情報を表記できる。
ユーザー登録
流れ
①newのviewに登録情報を入れる
②情報がcreateアクションにpostされる
③User.new(user_parames)をし、新しいユーザーを作成
①newのviewに登録情報を入れる
newのhtmlは以下のようになっている。
inputのなかで
type="text"はそのまま表示
type="email"ではスマホから入力するとき、メールアドレスに最適化された特別なキーボードが表示
type="password"ではセキュリティ上の目的のために文字が隠蔽されています
nameの値を/usersへpost
<form action="/users" class="new_user" id="new_user" method="post">
<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />
<label for="user_email">Email</label>
<input id="user_email" name="user[email]" type="email" />
<label for="user_password">Password</label>
<input id="user_password" name="user[password]" type="password" />
②情報がcreateアクションにpostされる
saveできた場合はログインしユーザ画面へ、失敗した場合はrender "new"で戻す。
・作成における制限もつける
modelsフォルダのUser.rbにvalidates にて制限をつける。
validates :name, presence: true, length: {maximum: 50}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: {maximum: 255},format: {with: VALID_EMAIL_REGEX}, uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
③User.new(user_parames)をし、新しいユーザーを作成
def create
@user = User.new(user_params)
if @user.save
log_in @user
redirect_to @user
else
render "new"
end
・
・
・
private
def user_params
params.require(:user).permit(:name, :email, :rank, :password, :password_confirmation)
end
paramsハッシュでは:user属性を必須とし、名前、メールアドレス、パスワード、パスワードの確認の属性をそれぞれ許可し、それ以外を許可しない。
admin属性など他の属性をpostされないようにするため