#5.UsersのProfileを作成する
以下記事を参照に、Usersのprofile作成をする。
https://qiita.com/ryokky59/items/71b5a853989721b89c6e
<注意点>
※ app/controllers/user/apprication_controller.rb
のファイルをいじるよう記載があるが、当方の場合、app/controllers/apprication_controller.rbが生成されたので、こちらをいじった。
※resources :users, only: [:show] と get 'users/show'の二つが作成されていたので、
resources :users, only: [:show] だけにした。
<生じたエラー>
上記記事を参照してshowページまで無事にたどり着くか試したかったが上手くいかなかった。
++++++++++++エラー内容++++++++++++++
このサイトにアクセスできません
localhost で接続が拒否されました。
++++++++++++++++++++++++++++++++++
この時、$ rails routes コマンドでルートが正しく設定されているか確認するよう教わった。
https://pikawaka.com/rails/rake_routes
<解決策>
以下のようにコードを書き換えるように教わった。
Rails.application.routes.draw do
devise_for :sellers, controllers: {
sessions: 'sellers/sessions',
passwords: 'sellers/passwords',
registrations: 'sellers/registrations'
}
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
resources :users, only: [:show] ← ここ
end
記事を参考にした際、resources :users, only: [:show]
を一番上に置いた。
ルーティングは一番上にあるコードが優先的になる為、
例えば、/users/sessionsも/users/passwordsも/users/:idのルーティングとして読み込まれ、引数の1のようにsesssionsとpasswordsも引数の一つとして扱われてしまっていた。
<その他修正点>
Vessel_Trader_Queen/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
# deviseコントローラーにストロングパラメータを追加する
# before_action:configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
# サインアップ時にnameのストロングパラメータを追加
devise_parameter_sanitizer.permit(:show, keys: [:name])
# アカウント編集の時にnameとprofileのストロングパラメータを追加
devise_parameter_sanitizer.permit(:account_update, keys: [:name, :introduction])
end
# ログイン後、マイページに移動する
def after_sign_in_path_for(resource)
user_path(resource)
end
end
Vessel_Trader_Queen/app/controllers/users_controller.rb
class UsersController < ApplicationController
# ログイン済ユーザーのみにアクセスを許可する
before_action :authenticate_user!, only: [:show]
def show
if params[:id]
@user = User.find(params[:id]) #追記
end
end
end
Vessel_Trader_Queen/app/models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_save { self.email = email.downcase }
# 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 }
# validates :type, presence: true, length: { maximum: 50 }
# validates :industry, length: { maximum: 50 }
# validates :introduction, length: { maximum: 1000 }
end
Vessel_Trader_Queen/app/views/users/show.html.erb
<h1>Users#show</h1>
<p>名前 : <%= @user.name %></p>
<p>メールアドレス : <%= @user.email %></p>
<p>プロフィール : <%= @user.introduction %></p>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
※正しこの時点では「名前とプロフィールが保存できなかった」
#6.Sourcetreeの導入
Sourcetreeが便利だということでSourcetreeをインストールした。
#7.git pull の使用
この時、先生がほとんどのコードを書き換えたので、git pull を使用した。
参考になったのは、以下のページである。
git fetch + git merge = git pull
git cloneは、チーム開発の初期段階、特に自身のローカルにアプリのコードがない場合に使用する、というイメージ。
#8.名前とプロフィールが保存できない問題の解決
5.のコードを更に以下のように修正した。
また、他の項目も付け足した。
Vessel_Trader_Queen/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
# deviseコントローラーを実行する前に、configure_permitted_parametersメソッドを実行する
before_action :configure_permitted_parameters, if: :devise_controller?
# sign_upアクション時にnameとintroductionカラムの保存を許可する
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :introduction, :industry, :user_type ])
end
# ログイン後、マイページに移動する
def after_sign_in_path_for(resource)
user_path(resource)
end
end
Vessel_Trader_Queen/app/controllers/users_controller.rb
class UsersController < ApplicationController
# ログイン済ユーザーのみにアクセスを許可する
before_action :authenticate_user!, only: [:show]
def show
if params[:id]
@user = User.find(params[:id]) #追記
end
end
end
Vessel_Trader_Queen/app/models/user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_save { self.email = email.downcase }
# 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 }
end
Vessel_Trader_Queen/app/views/users/show.html.erb
<h1>Users#show</h1>
<p>名前 : <%= @user.name %></p>
<p>メールアドレス : <%= @user.email %></p>
<p>自己紹介 : <%= @user.introduction %></p>
<p>業種 : <%= @user.industry %></p>
<p>業務形態 : <%= @user.user_type %></p>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
config/routes.rb
Rails.application.routes.draw do
devise_for :sellers, controllers: {
sessions: 'sellers/sessions',
passwords: 'sellers/passwords',
registrations: 'sellers/registrations'
}
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
resources :users, only: [:show]
end