0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-10
rails new profile
cd profile
rails s #localhost3000で起動の確認

#ログイン機能実装

rails g controller comments index
login_app/config/routes.rb
Rails.application.routes.draw do
  root 'comments#index' # ここを追記します
  get 'comments/index' # 自動で設定されたルーティング
  devise_for :users
end
login_app/gemfile
gem 'devise' #適当に挿入
bundle install

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

rails g devise:install
config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
#上の方にはりつけ
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

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の作成

#親子関係を整える

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
model/profile.rb
class Profile < ApplicationRecord
  belongs_to :user
  has_many :articles
end
model/profile.rb
class Profile < ApplicationRecord
  belongs_to :user
  has_many :articles
end
model/article.rb
class Article < ApplicationRecord
  belongs_to :user
  belongs_to :profile
end

モデルの作成

rake db:migrate   

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

comments/index.html.erb
  <%= link_to 'New Profile', new_profile_path %>
  <% else %>

<% else %>の上にはりつけ
ブラウザで動作確認 

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

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

profiles/index.html.erb
<%= link_to 'New Article', new_article_path %>

1番最後の行に追加する

#Articleのuser_idが現在のログインしているuserのIDとする

articles_controller.rb
  def new
    @article = Article.new(:user_id => current_user.id)
  end

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

articles/_form.erb
 <div class="field">
    <%= form.hidden_field :user_id %>
  </div>

hidden_fieldに変更して、labelを外す

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?