1. savaniased

    No comment

    savaniased
Changes in body
Source | HTML | Preview
@@ -1,146 +1,146 @@
-## ログインの有無 user_signed_in?
+## ログインの有無-user_signed_in?
deviseの実装で使えるようになるメソッドでこれでログインしてるかしてないか
処理を分けることができます。
```html:index.html.erb
<% if user_signed_in? %>
<!-- ログインしている時 -->
<div class="user_nav grid-6">
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<a class="post" href="/tweets/new">投稿する</a>
</div>
<% else %>
     <!-- ログインしていない時 -->
<div class="grid-6">
<%= link_to "ログイン", new_user_session_path, class: 'post' %>
<%= link_to "新規登録", new_user_registration_path, class: 'post' %>
</div>
<% end %>
```
## リンクの書き方
```html:html
<%= link_to 'トップへ', '/home', class: 'sample' %>
  
   ビューファイルとして読まれるとこうなります。
   <a class="sample" href="/tweets">ホームへ</a>
 
```
## prefix
 Prefix(プレフィックス)とは、ルーティングパスの変数のことです。
 コントローラ、ビューなどで呼び出すことで、prefixのパスやURL情報を取得できるようになります。
 Prefixは、routes.rbの各リクエストにオプションとして設定しますが、
 コードによっては自動作成される場合もあります。
確認方法は rake routesコマンドで確認できます。
```bash:ターミナル
#rake routesコマンドの実行
$rake routes
#実行結果
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
root GET / tweets#index
tweets_new GET /tweets/new(.:format) tweets#new
tweets POST /tweets(.:format) tweets#create
GET /users/:id(.:format) users#show
DELETE /tweets/:id(.:format) tweets#destroy
GET /tweets/:id/edit(.:format) tweets#edit
PATCH /tweets/:id(.:format)
  
```
簡単な表にするとこんな形です。
| リクエスト | prefix | path |
|:-:|:-:|:-:|
|devise/sessions#new |new_user_session |/users/sign_in |
|devise/sessions#destroy|destroy_user_session |/users/sign_in |
|devise/sessions#create |user_session |/users/sign_out |
prefixを利用する場合は、destroy_user_session_pathのように、最後に_pathとつける必要があります。
作成例はこちらです。
```html:ターミナル
<header class="header">
<div class="header__bar row">
<h1 class="grid-6"><a href="/">PicTweet</a></h1>
<!-- ログイン有無のメソッド -->
<% if user_signed_in? %>
<!-- ログインしている時 -->
<div class="user_nav grid-6">
<!-- ここでpathとmethodを定義しています。 -->
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<a class="post" href="/home/new">投稿する</a>
</div>
<% else %>
<!-- ログインしていない時 -->
<div class="grid-6">
   <!-- ここでpathとmethodを定義しています。 -->
<%= link_to "ログイン", new_user_session_path, class: 'post' %>
<%= link_to "新規登録", new_user_registration_path, class: 'post' %>
</div>
<% end %>
</div>
</header>
```
##リダイレクト処理(before_actionとunless)
このままだとログインしてなくても投稿できてしまうので
ログインしてなかった場合送り返す処理コードが必要です。
```ruby:controller
class TweetsController < ApplicationController
before_action :move_index, except: :index
# index以外のリクエストがあった時実行
#(省略)
def move_index
redirect_to action: :index unless user_signed_in?
end
# ログインしてない時indexに送り返す処理を強制的に実行する
```
**before_action**
 コントローラのアクションが実行される前に
 そのメソッドを実行することができます
 又 exceptでそれ以外
   onlyでそれのみの実行になります。
**redirect_to**
 redirect_toメソッドをアクション内で利用すると
 そこからさらに別のアクションを実行したり、ビューに遷移させたりできます。
**unless ワンライナー**
 unlessでfalseの時に実行されます。
 
 又ワンライナーとは
 たった1行のプログラムだけで実現するもの