ルーティングを作成
Rails.application.routes.draw do
get '/', to: 'home#top'
get '/signup', to: 'users#new'
post '/users/create', to: 'users#create'
get '/login_form', to: 'users#login'
get 'users/index', to: 'users#index'
get 'users/:id', to: 'users#show'
end
コントローラを作成
.
.
.
def login_form
end
.
.
.
ログインページへリンクを作成
.
.
.
<li>
<%= link_to "ログイン", "/login_form" %>
</li>
.
.
.
ページが表示された。成功。
POSTのリクエストを行えるようにする。
ルーティングを設定する
.
.
.
post '/login', to: 'users#login'
.
.
.
コントローラーを作成
.
.
.
def login
@user = User.find_by email: params[:email], password: params[:password]
redirect_to "/users/#{@user.id}"
end
.
.
.
まずは探すだけにする。
これでメールアドレスとパスワードで探せる。
login_form.html.erbでpostできるようにする
.
.
.
<div>ログインフォーム</div>
<div>
<%= form_tag( "/login", method: :post) do %>
<p>メールアドレス</p>
<input name="email">
<p>パスワード</p>
<input name="password">
<input type="submit" value=ログイン>
<% end %>
</div>
.
.
.
ログイン成功!
loginアクションの条件分岐
テーブルになかったら再びログインフォームに戻す。
def login
@user = User.find_by email: params[:email], password: params[:password]
if @user
redirect_to "/users/#{@user.id}"
else
render "/login_form"
end
end
Template is missing
Missing template /login_form with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in: * "/Users/hyoudoumasatomo/Repos/garden/app/views" * "/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/actiontext-7.0.2.3/app/views" * "/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/actionmailbox-7.0.2.3/app/views" Did you mean? users/login_form users/login layouts/rails/conductor users/hogehoge users/index rails/conductor/action_mailbox/inbound_emails/index
.
.
.
def login
@user = User.find_by email: params[:email], password: params[:password]
if @user
redirect_to "/users/#{@user.id}"
else
render "login_form"
end
end
.
.
.
renderはパスを書くのではなくてファイル名だったような気がする。
成功!
前に戻ってユーザー情報を編集する
ユーザー情報を編集
まず編集のリンクを作成してルーティングを作成してコントローラを作成
Rails.application.routes.draw do
.
.
.
get 'users/edit', to: 'users#edit'
end
編集ページを作成する。
これで編集内容を決める
.
.
.
<div>ユーザー情報編集</div>
<div>
<%= form_tag('/users/create', method: :post) do %>
<p>ユーザー名</p>
<input name="name" value="<%= @user.name %>">
<p>メールアドレス</p>
<input name="email" value="<%= @user.email %>">
<p>パスワード</p>
<input name="password" value="<%= @user.password %>">
<input type="submit" value=保存>
<% end %>
.
.
.
editアクションを作成する
名前とメールアドレスとパスワードを編集する
editページを作成する
.
.
.
<div>ユーザー情報編集</div>
<div>
<%= form_tag('/users/create', method: :post) do %>
<p>ユーザー名</p>
<input name="name" value="<%= @user.name %>">
<p>メールアドレス</p>
<input name="email" value="<%= @user.email %>">
<p>パスワード</p>
<input name="password" value="<%= @user.password %>">
<input type="submit" value=保存>
<% end %>
</div>
.
.
.
## showページにリンクを作成
.
.
.
<div>ユーザー紹介</div>
<div>
<h5> id: <%= @user.id %> </h5>
<h2> <%=@user.name %> </h2>
<%= link_to "編集", "/users/edit" %>
</div>
.
.
.
これで行くか?
NoMethodError in Users#show
Showing /Users/hyoudoumasatomo/Repos/garden/app/views/users/show.html.erb where line #12 raised:
id: '.freeze;@output_buffer.append=( @user.id );@output_buffer.safe_append='
^^^ showアクションがない ```show.html.erb```の12行目がおかしい。 調べてみる。.
.
.
<div>ユーザー情報編集</div>
<div>
<%= form_tag('/users/create', method: :post) do %>
<p>ユーザー名</p>
<input name="name" value="<%= @user.name %>">
<p>メールアドレス</p>
<input name="email" value="<%= @user.email %>">
<p>パスワード</p>
<input name="password" value="<%= @user.password %>">
<input type="submit" value=保存>
<% end %>
</div>
.
.
.
まだインスタンス変数の設定はしていない。
長くなりすぎたので次のページに書く