Heroku CLIをインストールする際に発生した問題

はじめに
どうもバンバンです。
今回はタイトルの通りエラーに遭遇したので、内容と解決方法を記述していこうと思います。
 
 
状況
Heroku CLIをインストールしようとして、ターミナルに
% brew tap heroku/brew && brew install heroku
と記述し実行したらエラーは発生してインストールできなかった。
 
エラー文
You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/share/man/man8
 
エラー文考察
chown
ファイルの所有権を変更するためのunixコマンド
ファイルの所有権の関係でエラーが起こっている
設定を変更すればいい
 
解決方法
sudo chown -R $(whoami) 〜
をそのままターミナルで記述実行すると解決
 
おわりに
なんと親切なことにコードをターミナルが教えてくれています。そのままコピペしたら解決しインストールできました。
アップデートでもよく問題が発生するらしいので、このエラー文が出た際には気をつけましょう。

チャットルーム管理機能④

どうもバンバンです。
今回はRailsでユーザー管理機能を実装する方法を復習を兼ねて 残していこうと思います。
ユーザ管理機能と一緒で全部書くと長くなるので何編かに分けて投稿していきます。
 
はじめに
今回はチャットルーム保存機能の実装になります。
復習中心になりますが大事な内容なので
丁寧に学習していきます
 
用語集
デバック
バグを見つけること
 
pry-rails
Railsにおけるデバック用のGem
binding.pryが使用できるようになる
 
binding.pry
ソースコードの中で記述するとbinding.pryが存在する箇所で
Railsの処理を一時停止しコンソールを起動できる
 
pry-railsの導入方法
①gem 'pry-rails'をgemfileに追記
②ターミナルでbundle install
③ローカルサーバー再起動
 
手順
 
配列の保存を許可
ストロングパラメーターを設定
def create
createアクションを定義 保存
@room = Room.new(room_params)
インスタンス変数に取得したストロングパラメーターを生成し代入
if @room.save
もし保存に成功したら
redirect_to root_path
新しいデータを取得したままトップページへ遷移
else
成功できなかったら
render :new
new.html.erbへデータを取得せず遷移
end
end
 
 
private
 
 
 
def room_params
↑引数
params.require(:room).permit(:name, user_ids: )
ストロングパラメーターを定義 ↑配列
require(:モデル名).permit(キー)
end
注意点:必ず保存の成功・失敗による条件分岐が必要になる
 
バリデーションの設定
validates :name, presence:trueを対応モデルに記載
これによりルーム名が空のときは作成できないように設定
 
おわりに
ストロングパラメーターはかなりの頻度で出てくるので
しっかりと理解していきたい内容になります。出題頻度の高い文言は覚えてしまえば学習効率がよくなるかもしれないですね。

チャットルーム管理機能③

どうもバンバンです。
今回はRailsでユーザー管理機能を実装する方法を復習を兼ねて 残していこうと思います。
ユーザ管理機能と一緒で全部書くと長くなるので何編かに分けて投稿していきます。
 
はじめに
今回はプルダウンの実装になります。
今後アプリを作成する中でもよく使う機能だと思うのでしっかり復習を兼ねて学習していきます
 
用語集
プルダウン
メニューバーのこと
今回は登録しているユーザーがメニューバーをクリックすると表示されるようにする機能のこと
 
select要素
HTMLで使用
セレクトボックスを作成するための要素
select要素のname属性に値を指定すると、コントローラへ値を渡すことが可能
 
option要素
select要素の中に記述することでプルダウンの選択肢になる要素
親子関係
<select>
<option>ライオン</option>
<option>キリン</option>
<option>カバ</option>
</select>
 
モデル名.where("条件")
条件に一致したレコードを配列として取得可能
 
モデル名.where.not("条件")
条件に一致したレコード以外の値を配列として取得
 
手順

https://tech-master.s3.amazonaws.com/uploads/curriculums//8eda805094bd2ab4e8645397f1fafd37.gif

①新規チャットルーム作成画面を編集
対応するviewを編集
<select>
↑select要素 セレクトボックスを作成するために記述
<option>チャットするユーザーを選択してください</option>
↑案内文として記述
<option>ユーザー1</option>
↑仮データ
<option>ユーザー2</option>
↑仮データ
</select>
 
②DBからユーザー情報を取得
 
<select>
 
<option value="">チャットするユーザーを選択してください</option>
 
<% User.all.each do |user| %>
↑ユーザーの情報を順番に取り出す
<option><%= user.name %></option>
↑その中からユーザーの名前を繰り返し表示
<% end %>
 
</select>
 
③ログインしているユーザー情報を取り除く
 
<select>
<option value="">チャットするユーザーを選択してください</option>
 
<% User.where.not(id: current_user.id).each do |user| %> ↑一致したレコード以外を取得 ↑ログイン中のユーザー
 
<option><%= user.name %></option>
<% end %>
</select>
where.not(”条件”)を使用することで
現在ログイン中(current_user.id)以外取得
 
④コントローラへ値を送る
選択したユーザーのidをパラメーターとして送りたい
<select name="room[user_ids]">
↑コントローラーへ値を送る=name属性
<option value="">チャットするユーザーを選択してください</option>
<% User.where.not(id: current_user.id).each do |user| %>
 
<option value=<%= user.id %>><%= user.name %></option>
 
おわりに
機能実装をしていて感じることは、暗記は全く必要ないってことです。むしろ暗記してしますと理解しないと行けない部分を御座なりにしながらすすめてしまうので、調べ直したら理解できる学習がいいと最近は思っています。

チャットルーム管理機能②

どうもバンバンです。
今回はRailsでユーザー管理機能を実装する方法を復習を
兼ねて 残していこうと思います。
ユーザ管理機能と一緒で全部書くと長くなるので何編かに
分けて投稿していきます。
 
はじめに
今回はDB中心になります。
中間テーブルの作成と各テーブルのアソシエーションの定義を実装していきます。
本当はもっともっと深いんでしょうが、今現在の私の技量で
できる範囲で書いていきます(・∀・)
 
用語集
 
アソシエーション
モデルを利用したテーブル同士の関連付けのこと
モデルに定義することで 紐づく別のモデルの情報へアクセスできる
 
 
中間テーブル
2つのテーブルの中間にあるテーブルのこと。
多対多の関係にある2つのテーブルの間に挟まって、2つの
組み合わせパターンだけをレコードとして保存する。

https://tech-master.s3.amazonaws.com/uploads/curriculums//72c6b9ec9559d54e8ce6338772c23b80.png

has_manyメソッド
1対多の関係があることを示すメソッド
ex)
一人のユーザーは複数のツイートをもつ
 
belongs_toメソッド
1対1の関係があることを示すメソッド
ex)
一つのツイートは一人のユーザーに所属している
 
foreign_key: true
テーブルの情報を参照する役割
 
手順
1中間テーブルを作成
userとroomは多対多の関係(アソシエーション)
情報が複雑化するので中間テーブルを作成する
ユーザーidとルームidの組み合わせが蓄積されていく
 
ターミナル
rails g model テーブル名_テーブル名
 
2中間テーブルのマイグレーションファイル編集
t.references :テーブル名, foreign_key: true
 
t.references :テーブル名, foreign_key: true
↑中間テーブルにはユーザーとチャットルームが必ず存在している
ことが前提なので、各テーブル情報foreign_keyで参照している
 
3ローカルサーバー再起動
 
4各テーブルのアソシエーションを記述
 
中間テーブルは多対多の間に挟まっている
中間テーブル視点・・・1対1=belongs_to
その他にテーブル・・元々多対多= has_many
 
おわりに
少し寝ぼけながら作成してので抜けがあったら
後々編集します

チャットルーム管理機能① 作成画面実装編

どうもバンバンです。
今回はRailsでユーザー管理機能を実装する方法を復習を兼ねて 残していこうと思います。
ユーザ管理機能と一緒で全部書くと長くなるので何編かに分けて投稿していきます。
 
はじめに
今回は各種MVCの導入と画面作成までの流れを記述していきます。
いつもの用に用語集と流れで構成していきますが、用語はだんだん過去の記事とかぶってきます。しかし被るほど大事なことという意識で毎回載せていきます(・∀・)
 
用語集
resourcesメソッド
7つのアクションへのルーティングを自動生成するメソッド
ルーティングを生成する=config/routes.rb に記載
引数に:シンボルと指定するとそのパスに対応するルーティングが生成される。
ex) resources :users ←/usesのパスに対応するルーティング
即ちcontrollers/users_controller.rbで7つのアクションを定義できる。
 
onlyオプション
resourcesにオプションとして加えると 指定したアクションのみのルーティングを自動生成する。
ex) resources :users これだけだと7つ全て生成
そこで resources:users, only: :editとすると
controllers/users_controller.rbでeditのアクションのみ定義できる
絞る理由:不要なアクションを設定しておくことで余分なエラーが発生する恐れがあるから。
編集と更新の機能だけあれば良いならonly: [:edit , :update]
 
機能内容
チャットルーム作成画面でチャットルーム名の入力とチャットを行うユーザーの選択を行って1対1でメッセージのやり取りができるチャットルームを作成
 
実装の流れ
 
1チャットルームの新規作成画面を実装する
画面の実装 HTML CSS
 
2モデルの作成
事前に用意した設計書を元にチャットルームの情報を管理する
モデルを作成
ターミナル
rails g model モデル名
 
テーブルの内容を決める
今回保存するのはルーム名だけ
class CreateRooms < ActiveRecord::Migration[6.0]
def change
create_table :rooms do |t|
t.string :name, null: false
↑部屋名の入力がなければ作れないように記述
t.timestamps
end
end
end
 
4データベースへ反映させる
ターミナル
rails db:migrate
 
5画面を表示させる
コントローラーの実装
ターミナル
rails g controller コントローラー名
 
6コントローラーの編集
def new
@room = Room.new
↑newアクション=新規作成
チャットルームを新規作成するからnew
end
 
7ルーティング設定
routes.rb
Rails.application.routes.draw do
devise_for :users
root to: "messages#index"
resources :users, only: [:edit, :update]
 
resources :rooms, only: [:new, :create]
↑コントローラーで動くアクションがnewとcreateのみ
そこでresources:コントローラー名 onlyオプションで指定
チャットルームを新規作成→保存のみでいい
end
 
おわりに
ユーザ管理機能の時もそうですが、Ruby on Railsでは必要な機能を実装
する際は
①必要ならdevise導入
②ビュー作成
③モデル作成→テーブル(DB)編集
④コントローラー作成→編集
⑤ルーティング設定
とまあ大体の流れは一緒な印象です。ここを掴めるとアプリケーション機能実装のスピードがあがりそう

ユーザー管理機能 ログアウト機能実装編

どうもバンバンです。
今回はRailsでユーザー管理機能を実装する方法を復習を兼ねて 残していこうと思います。
ユーザ管理機能は全部書くと長くなるので何編かに分けて投稿していきます。
 
はじめに
ユーザ管理機能も大詰めで残りは ログアウト機能の実装になります。実装とは言いますが・・有り難いことにdeviseで既に機能自体は用意されてます!!
ということでログアウトのパスを指定する実装のみ紹介していきます。
 
用語集
rails routesコマンド
ターミナルで実行すると、そのアプリケーションで設定されているルーティングを確認することができるエラーの対処の際にも活躍するコマンド

https://tech-master.s3.amazonaws.com/uploads/curriculums//ff8f666fdd63eafdd901a46f672da476.png

link_toメソッド
リンクを追加するためのヘルパーメソッド
aタグの代わりに使用できる
<%= link_to 'リンクに表示する文字', 'リンク先のURL' %>
 
手順
rails routesでログアウトアクションに対応するパスを確認する
destroy_user_session →パス名
DELETE →HTTPメソッド
/users/sign_out(.:format) →URLのようなもの
devise/sessions#destroy →コントローラーとアクション
つまりパスは destroy_user_session_path
最後にpathをつけるのを忘れないように注意
 
②<%= link_to 'リンクに表示する文字', 'リンク先のパス' , method: :メソッド名%>
に代入していく
リンクに表示する文字=”ログアウト”
リンク先のパス=destroy_user_session_path
method名=delete
 
メソッド名を忘れてしまうと、コンピューターが似たようなルーティングと間違いをおかすといったエラーが発生することが多いです。
 
さいごに
全4編になってしまったユーザ管理機能実装についてでしたが、かなり初歩的なことしか記述していません。今後私自身の地力がついてきたら追記して行こうと思っています。

ユーザー管理機能 編集機能実装編

どうもバンバンです。
今回はRailsでユーザー管理機能を実装する方法を復習を兼ねて 残していこうと思います。
ユーザ管理機能は全部書くと長くなるので何編かに分けて投稿していきます。
 
はじめに
前回 DBへの保存とページの作成を終えたので、今回はユーザー情報編集機能を実装していきます。
いつものように用語集→手順で進めていきます。
 
用語集
7つのアクション
アクション名
内容
index
一覧表示
show
詳細表示
new
生成
create
保存
edit
編集
update
更新
destroy
削除
基本プログラミング用語はそこまで丸暗記する必要ないと思っていますが、これはよく出てくるので覚えておいたほうが効率が良いです。
 
resourcesメソッド
7つのアクションへのルーティングを自動生成するメソッド
ルーティングを生成する=config/routes.rb に記載
引数に:シンボルと指定するとそのパスに対応するルーティングが生成される。
ex) resources :users ←/usesのパスに対応するルーティング
即ちcontrollers/users_controller.rbで7つのアクションを定義できる。
 
onlyオプション
resourcesにオプションとして加えると 指定したアクションのみのルーティングを自動生成する。
ex) resources :users これだけだと7つ全て生成
そこで resources:users, only: :editとすると
controllers/users_controller.rbでeditのアクションのみ定義できる
絞る理由:不要なアクションを設定しておくことで余分なエラーが発生する恐れがあるから。
編集と更新の機能だけあれば良いならonly: [:edit , :update]
 
redirect_toメソッド
redirect_to パスと記載 パスはrails routesで確認
新たなリクエストを送信された時と同じ動きになる。
よってインスタンス変数が上書きされた状態でビュー画面へたどり着く
ex)controllers/users_controller.rb
def update
if current_user.update(user_params)
redirect_to root_path
現在のユーザーのユーザー情報更新が正しくできた場合新しい更新データを持ったままルーティング→コントローラー→ビューの流れでたどり着く
最後にビューで表示されるユーザー情報は更新された情報
 
renderメソッド
render :アクションと記載
新たにリクエストされることがない。
よってインスタンス変数に変化がないままビュー画面へたどりつく(というよる単純に表示される)
else
 
render :edit
 
end
値が正しくなければ(空欄など)情報は上書きされずedit.html.erbへ戻る
 
手順
今回はユーザー情報の編集機能を実装するので
ルーティング→コントローラ作成と設定→ページ遷移も実装
 
ルーティング
ユーザー編集に必要なルーティングはeditとupdate
usersコントローラでeditとupdateが利用できるように
resources :users,only:[:edit, :update]と記載してルーティング設定
 
コントローラー生成
rails g controller コントローラー名
今回のコントローラー名はusers
 
コントローラー設定
editとupdateをルーティングしているのでその2つのアクションを定義する
 
edit・・編集画面を表示させるだけでよいので
def edit
end
と記載し、views/edit.html.erbの表示をリクエストする
*views/edit.html.erbは既に作成済みとして話を続けます
 
update・・編集内容が更新されるように設定
def update
 
current_user.update(user_params)
↑ストロングパラメーターで許可されているnameとemailのみ
更新 current_user=現在のユーザー
end
 
 
private
 
 
def user_params
 
params.require(:user).permit(:name, :email)
↑nameとemailの編集のみ許可するストロングパラメーター
 
end
 
end
前編でも述べましたがストロングパラメーターがなぜ必要なのかは後日ブログに書こうと思っています。
 
ページ遷移の機能実装
更新が成功したときはチャット画面へ移動
失敗したときはeditページに戻ってくるように設定
redirect toメソッドとrenderメソッドを利用する
def update
 
if current_user.update(user_params)
 
redirect_to root_path
↑更新が成功した場合root_path(チャット画面)へ
else
 
render :edit
↑失敗した場合editページを表示する(情報は更新されていない)
 
end
 
end
 
private
 
def user_params
params.require(:user).permit(:name, :email)
end
 
今回はここまで 次回はログアウト機能の実装編になります。