プロフィールアプリの作成

```ruby
rails new profile
cd profile
rails s #localhost3000で起動の確認
```

#ログイン機能実装
```ruby
rails g controller comments index
```

```ruby:login_app/config/routes.rb
Rails.application.routes.draw do
  root 'comments#index' # ここを追記します
  get 'comments/index' # 自動で設定されたルーティング
  devise_for :users
end
```

```ruby:login_app/gemfile
gem 'devise' #適当に挿入
```

```
bundle install
```

次はdiviseを利用するのに必要なファイルを作成しましょう

```
rails g devise:install
```

```ruby:config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
#上の方にはりつけ
```

```ruby:app/views/layouts/application.html.erb
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
```
これを、<%= yield %>の直前に追記します。

```
rails g devise user #ログイン機能用のモデルを作成
rake db:migrate #マイグレート
rails g devise:views #ログイン機能に必要なビューファイルをまとめて作成
```

```:views/comments/index.html.erb
<h1>ログインアプリ</h1>

<% if user_signed_in? %> <!-- ユーザーがログインしているか調べる -->
  <!-- ユーザーがログインしていた時の処理 -->

  <h4> メールアドレス： <%= current_user.email %> </h4>
  <%= link_to "ログアウト", destroy_user_session_path, method: :delete %> <!-- ログアウトをする -->
<% else %>
  <!-- ユーザーがログインしていなかった時の処理 -->
  <h2> 現在ログインしていません </h2>
  <%= link_to "新規登録", new_user_registration_path, class: 'post' %> <!-- 新規登録画面に移行する -->
<% end %>
```
もとのやつ消して、すべて貼りつけする

# 他のテーブルを作成する
![スクリーンショット 2021-02-10 17.32.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611089/c863ed16-113e-af10-08b3-4e919dd143d7.png)

```ruby
rails g scaffold profile user_id:integer name:string age:integer address:string
rails g scaffold article user_id:integer profile_id:integer tittle:string content:string
#articleとprofileMのVCの作成
```
#親子関係を整える
```ruby:model/user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_one :profile
  has_many :articles          
end
```


```ruby:model/profile.rb
class Profile < ApplicationRecord
  belongs_to :user
  has_many :articles
end
```

```ruby:model/profile.rb
class Profile < ApplicationRecord
  belongs_to :user
  has_many :articles
end
```

```ruby:model/article.rb
class Article < ApplicationRecord
  belongs_to :user
  belongs_to :profile
end
```

モデルの作成

```
rake db:migrate   
```

#ログイン後にnew profileつくる

```erb:comments/index.html.erb
  <%= link_to 'New Profile', new_profile_path %>
  <% else %>
```
 <% else %>の上にはりつけ
ブラウザで動作確認　


#ログインユーザーで生成や編集ができるようにする

```ruby:profiles_controller.rb
class ProfilesController < ApplicationController
  before_action :set_profile, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!

  # GET /profiles or /profiles.json
  def index
    @profiles = Profile.all
  end

  # GET /profiles/1 or /profiles/1.json
  def show
  end

  # GET /profiles/new
  def new
    @profile = Profile.find_or_create_by(:user_id => current_user.id)
    redirect_to edit_profile_url(@profile)
  end

  # GET /profiles/1/edit
  def edit
    if @profile.user_id != current_user.id
      raise ActionController::RoutingError.new("Not authorized")
    end
  end

  # POST /profiles or /profiles.json
  def create
    @profile = Profile.new(profile_params)

    respond_to do |format|
      if @profile.save
        format.html { redirect_to @profile, notice: "Profile was successfully created." }
        format.json { render :show, status: :created, location: @profile }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @profile.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /profiles/1 or /profiles/1.json
  def update
    respond_to do |format|
      if @profile.update(profile_params)
        format.html { redirect_to @profile, notice: "Profile was successfully updated." }
        format.json { render :show, status: :ok, location: @profile }
      else
        format.html { render :edit, status: :unprocessable_entity }
        format.json { render json: @profile.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /profiles/1 or /profiles/1.json
  def destroy
    @profile.destroy
    respond_to do |format|
      format.html { redirect_to profiles_url, notice: "Profile was successfully destroyed." }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_profile
      @profile = Profile.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def profile_params
      params.require(:profile).permit(:user_id, :name, :age, :address)
    end
end

```


```ruby:profiles/index.html.erb
<%= link_to 'New Article', new_article_path %>
```
１番最後の行に追加する

#Articleのuser_idが現在のログインしているuserのIDとする
```ruby:articles_controller.rb
  def new
    @article = Article.new(:user_id => current_user.id)
  end
```

user_idをフォームで変更できないようにする

```erb:articles/_form.erb
 <div class="field">
    <%= form.hidden_field :user_id %>
  </div>
```
hidden_fieldに変更して、labelを外す