Rails関連のことを調べてみた2022年10月22日

Rails関連のことを調べてみた2022年10月22日
目次

adminのパスワードを忘れた話。

はじめに

今回は投稿サイト作成にあたって、gemのdeviseを使って
user側とadmin側を分けて作成しております。
ん?devise?user側とadmin側分けるってなに?って方は以下サイトをご参照あれ。
>https://nllllll.com/ruby-on-rails/rails-devise/
>https://www.sejuku.net/blog/13378

deviseを導入することで、簡単に認証機能を実装することができます。
つまりサインアップやサインインの実装が簡単にできてしまう便利なgemです!

今回user側からの実装を進めていき、ある程度終わりが見えたところで
「さ、admin側に行くか」と思ったんですが。。

admin側のログイン画面にいき、ふと立ち止まりました。
「あれ?一度サインアップしてる??したかな。いやでもしたかも」
おそらく作成時にちゃんとサインアップできるかテストしていたんだと予測。
しかしそのパスワードもなにもかも覚えていない。

adminのパスワードを再設定しよう

方法

ぼっち演算子(&.)

# ぼっち演算子とは
&.(Safe Navigation Operator)は、通称ぼっち演算子と呼ばれており
ぼっち演算子は、オブジェクトに対してとあるメソッドを呼び出した時、そのオブジェクトがnilでない場合は、実行結果を返します。一方で、nilの場合は、nilを返してくれます。
“`ruby:ぼっち演算子を使って、テキストの情報を取得する
# 変数@itemに情報が定義されている場合
[1] pry(main)> @item&.text
=> “アイテム”

# 変数@itemがnilの場合
[2] pry(main)> @item&.text
=> nil
“`

通常のオブジェクトメソッドという書き方では、オブジェクトがnilの場合はundefined methodのエラーになってしまいます。
ですがぼっち演算子を使う事によりif文を使わず簡潔化する事が出来ます
“`ruby:例
# if文を使用した場合
@item.tags.first.tag_name if @item.tags.first.present?
# ぼっち演算子を使用した場合
@item.tags&

[Chart.js]折れ線グラフの縦軸を反対にする方法

# はじめに
今回ポートフォリを制作するにあたってChart.jsを使用し折れ線グラフを表示させました。
その中で折れ線グラフの縦軸を反対にしました。
あまり需要がないのか、実際に記事にされているものが無かったため公式を調べ実装を行いました。
この知識が誰かの役に立てば幸いと思い記事を書かせてもらいます。

# 今回記述するグラフについて
### 修正前
“`js:line_graph.html.erb
document.addEventListener(‘turbolinks:load’, function() {
var ctx = document.getElementById(‘line_graph’);
var myChart = new Chart(ctx, {
type: ‘line’,
data: {
labels: [‘1回前’, ‘2回前’, ‘3回前’, ‘4回前’, ‘5回前’, ‘6回前’, ‘7回前’, ‘8回前’, ‘9回前’, ’10回前’],
datasets: [{

ActiveStorageを用いた画像投稿機能の実装

# はじめに
Rubyにおいて画像投稿機能を実装するために必要な流れを忘れないためにまとめます。

## 1. 画像投稿機能を実装するためには
rubyにおいて画像投稿を実装するために必要な流れは以下の通り。

ActiveStorageを用いて
– アップロードした画像専用のテーブルを作成する
– 投稿した画像を表示する
– 投稿した画像の大きさを調整する

## 2. ImageMagickをインストールする
% brew install imagemagick
ImageMagickとは
コマンドラインから画像に処理を加えることができるツール。
処理としては、画像の作成やサイズ変更、保存形式の変更などがある。
ImageMagickはGemではなく、ソフトウェア。
そのため、Homebrewからインストールする。
GemではないImageMagickをRubyやRailsで扱うには、MiniMagickというGemが必要となる。

## 3. MiniMagickとImageProcessingをイン

カテゴリー選択機能の実装(ActiveHash)

# はじめに
カテゴリー選択機能の実装の流れを残す

## カテゴリー選択を実装するためには
例えば、都道府県名一覧やカテゴリーなど「基本的に変更されないデータ」があったする。
「基本的に変更されないデータ」は、データベースに保存する必要性がない。
一方、ビューファイルなどにそれらのデータを直接書いてしまうと、可読性に欠ける。
そのようなケースでは、ActiveHashが有用。

## ActiveHashとは
都道府県名などの変更されないデータをモデルファイル内に直接記述することで、
データベースへ保存せずにデータを取り扱うことができるGem。
すなわち、Active_Hashを用いることで、モデルファイルに直接記述した変更されないデータに対して、ActiveRecordのようなメソッドを用いることができる。(例えば、allやcreateメソッドのことを指している。)

## ActiveHash導入の流れ
### 1. Gemの導入

# Gemfile内
#中略
gem ‘active_hash’

# タ

【Rails基礎】ややこしい部分テンプレートの省略形について簡単にまとめてみた

ソースコードを見ていると部分テンプレートをパーシャルするときに様々な省略形を目にするので、調べたところとてもわかりやすい記事を見つけたので、紹介します。

https://techtechmedia.com/partial-template-rails/

【Rails初心者】form_withの使い方を隅から隅まで解説

form_withについて調べていたら最高の記事に出会ったので、ストックするために紹介します。

https://ymiyashitablog.com/rails-form_with/

includesメソッドってなんだろな。

はじめに

先日、ユーザーがBookmarkした投稿の一覧を出したくてコードで悩んでいたら、
こんな書き方はどう?と教えてもらったのですが…

“`ruby
@posts = Post.includes(:user).where(user_id: current_user.id)
“`
このincludesってたまに見るけどよくわからないなーってことで
自分の勉強のために調べてまとめてみました。

includes攻略のためには「N+1問題」の理解が重要!

いや「N+1問題」ってなんだよって思いますよね。
ざっくり言ってしまうと「N+1問題」=超非効率な状態です。
マクドナルドに行ったらハンバーガーを最初に買ってきて、その次にナゲットを買ってきて、
その後にさらにポテトを買ってくるような状態で、「いやそれまとめて一緒に買えたよね?」みたいな。
こんなことをしているとSQLが過剰に動かされてしまい、ブラック企業状態です。
おかげで疲労困憊によりパフォーマンスが低下してしまいそうです。

(SQL=デー

[rails 初心者]同率順位を踏まえたランキング機能

初めに

ポートフォリオテーマとして業者のレビューサイトを作成しています。
以下の画像のようなレビューサイトを作っていこうと思います。

![top画面2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822721/a259bdd1-d312-4eb9-219e-ecbbd0526cec.png)

※自分用でまとめてますので、分かり辛かったらすいません。
また理解不足・誤りがあったらコメント頂けますと幸いです。m(__)m<ヨロシクオネガイシマス

前提条件

①今回の記事ではランキング機能のみ(※同率順位を踏まえた順位)についてまとめます
②レビュー機能や並び替え機能については、以下URLの記事に記載されている内容を参考にしてください

[[rails初心者]複数権限でのログインを使ったレビューサイトの作成(基本)](https://qiita.com/about10/items/0e376c84022f2ac238d0)
[[

コメント投稿、削除機能のajax化

# コメント投稿、削除機能のajax化
## 手順
①commentsコントローラーの修正
②コメント作成、削除機能をajax化
③コメント作成、削除時の動的レンダリング処理を追加

## 1. commentsコントローラーの修正
コメント作成時の redirect_back を削除し、コメント削除処理を追加します。

“`app/controllers/comments_controller.rb
class CommentsController < ApplicationController def create @comment = current_user.comments.build(comment_params) @comment.save end def destroy @comment = current_user.comments.find(params[:id]) @comment.destroy! end ``` コメント削除のルートを追加します。 ```config/routes.rb Rails.app

[rails 初心者]メソッド化についてまとめてみた

初めに

縁があり、通っているプログラミングスクールのメンター(質問対応者)さんから次のことを勧められました
`メソッド化に力を入れた方がいい`と。。。
ということで今回はそのメソッド化についての基本知識?考え方?を自分なりにまとめてみました!!

注意事項

※自分用でまとめてますので、分かり辛かったらすいません。
また理解不足・誤りがあったらコメントにてご指摘頂けますと幸いです。m(__)m<ヨロシクオネガイシマス

前提条件

①今回は`rails`を題材にして話を進めていきます。

②次の二つの知識についてある程度理解済みであること   ※私の場合は60%ぐらいでした・・・多分(;^ω^)
・「メソッド」について理解していること
・「オブジェクト指向」について理解していること
※もしここで不安な方がいましたら、以下のプルダウンのところを開いてリンク先を一読してみてください。

③`posts_conntroller`にて`@post = Post.find(

Missing :controller key on routes definition, please check your routes. 即解決できた。(自分用)

dockerを使いrailsのdeviseを入れている時のエラー。

$ docker-compose exec web rails g devise User

Missing :controller key on routes definition, please check your routes.
とエラーメッセージ表示された。

routes.rb内では

Rails.application.routes.draw do
devise_for :users
root ‘pages/index’ ⇦ ⭕️ root ‘pages#index’ これで解決した。
get ‘pages/index’
get ‘pages/show’

# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

# Defines the root path route (“/”)
# root “articles#index”

モデルやコントローラーの命名規則

## はじめに
モデルのクラス名で誤った名前を気付かないうちにつけてしまい、エラー解消に時間がかかったので、同じミスはしないように記録に残す。

## モデル、コントローラーの命名規則
https://qiita.com/gakkie/items/3afcd505c786364aa5fa

これがシンプルにまとめられていた印象。

【Rails】development以外の環境のコンソールに入ったときのConnection refusedエラー

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## development以外の環境のコンソールに入りたいとき
“`
rails console -e production
“`

## コンソールに下記のエラーで入れなかったとき

“`
could not connect to server: Connection refused
“`
“`database.yml“`内のhost名を“`docker-compose.yml“`で定義されているDB用コンテナ名と一致させる。

“`docker-compose.yml
environment:
DB_HOST: postgres
DB_NAME: hoge_development
DB_NAME_TEST: hoge_test
DB_USERNAME: postgres
DB_PASSWORD: password
REDIS_HOST: redis
“`

“`config/database.yml
production:
<<: *de

個人的 Rails × Vue まとめ

## 概要

RailsをAPIサーバにしてVueのクライアントアプリと疎通する構成ではなく、`rails webpacker:install:vue`でRailsにWebpackを通してVueを入れたプロジェクトで出てくるあれこれについてまとめます。

私自身、Vue初心者でありフロントエンドスキルがないため手探りで調べて知ったことについてまとめるので、間違っている点はコメントいただけると嬉しいです。

### 注意事項

本記事で解説している内容を参考に各々で試される際は、必ず自己責任でお願いいたします。

論文のように正確に調査して資料をもとにまとめているわけではなく、私が試してわかったことをまとめているだけに過ぎません。

## Vue2とVue3のインストール方法について

とある記事で`rails webpacker:install:vue`だとVue2がインストールされるため、以下の手順でVue3がインストールできると解説されていました。

“`bash
$ yarn add vue@next vue-loader@next @vue/compiler-sfc
“`

sidekiq に特定のファイルを生成する処理とそのファイルを ActiveStorage でアップロードする処理のフローをまとめる

## 概要

例えば何らかの一覧画面上のデータを全てExportする機能を作った際に sidekiq でその重たい処理を実行させたい場面があるかと。
sidekiq のタスクが終わってファイルが生成できた後、ユーザーがそのファイルをダウンロードできるようにするためには ActiveStorage でファイル管理すると楽ですよね。

今回は、次の処理フローをまとめていきたいと思います。

1. 何らかの一覧画面上のデータを全てExportするボタンをクリックしてダウンロード画面へ遷移(UIスレッド)
1. sidekiqにその一覧データをCSVなどにファイル生成する処理をタスク化(UIスレッド・非同期)
1. ↑この間、ダウンロード画面上はダウンロード中のインゲージUIを表示させて裏ではAjaxでファイルが生成されたのか常に確認している(UIスレッド)
1. ファイルが生成できたらActiveStorageでlocal設定は特定のパスにファイルを移動、aws設定ならS3にファイルをアップロードする(非同期)
1. ファイルができたことを確認したらダウンロード中のインゲージUIを止めてファ

【個人開発】地味に便利!? リモートワーカー向けスケジュール共有サービスを開発しました【LINE×Googleカレンダー】

こんにちは。エンジニア転職活動中のYoshinoと申します。プログラミングスクールの「RUNTEQ」でRuby on Railsを中心に学習しています!

この記事では、私が作成した **[リモートワーカー向けスケジュール共有サービス「トリコミ」](https://torikomi.herokuapp.com/)** と、その使用技術について紹介させてください。

[![ogp.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730434/adfcdaf2-03d1-9222-5f7c-3040e23bf76e.jpeg)](https://torikomi.herokuapp.com/)

# 開発の背景

## 家庭のスケジュール共有、どうしてますか?

突然ですが、みなさんは家庭のスケジュールの共有、どうしてますか?

私は夫との2人暮らしで、**私は在宅、夫は通勤**というスタイル。

平日夜にたびたびスクール主催のオンライン勉強会に参加しているのですが、帰宅してきた夫に邪魔されたくないので、

【rails + minitest】 flashに格納したメッセージをassertする方法

## 概要
minitestでrailsのテストを書いていてふと、
「flashの内容でコードの挙動を確認出来れば、testコードの可読性があがりスマートなのでは??」と思ったので、書き方をメモします。

## 結論
以下のように記載すればOK。

assert flash.to_hash.value? “想定されるメッセージ”

## 詳細
Flashクラスはよくわからないので、`to_hash`でハッシュに変換したのち、`value?`メソッドで格納されたメッセージを検索してます。

これを使えば、以下のように、テストコードの可読性がグンッと上がって幸せ

“`ruby:sample-test
test “records-destroy” do
# 正常系
sign_in(@user2)
delete record_path(1)
assert flash.to_hash.value? “レコードを破棄しました”
# ↑ 一目瞭然
assert_redirected_to records_path

# 異常系
delete record_pa

Rubyのオブジェクト・メソッド・インスタンス・変数についてまとめてみた

## オブジェクトについて

### オブジェクトとは
Rubyにおいてはクラスから生成されたもののこと。

### クラスについて
Hogeクラス、のようなクラスを定義したとする。RubyではこのクラスもClassクラスに所属しているオブジェクトである、というのが大きなスタート。
これはどういうことかと言うと、HogeクラスというものがあったとするとこのHogeクラスも実際は`Class.new`して作られている、オブジェクトである、ということ。
下記の意味は`Hoge=Class.new`と同意義である。
“`ruby
class Hoge
end
“`

### インスタンスオブジェクト(インスタンス)
クラスから生成されるのがインスタンスオブジェクト(インスタンス)。
`クラス名.new`で生成することができる。
RailsにおけるモデルはClassクラスからインスタンスを生成し、定数を与えていると言える。
コントローラーも同様。

### レシーバーとは
~~メソッドの戻り値を受ける対象~~
~~下記の場合、Personがレシーバー。オブジェクトの世界ではオブジェクトにメ

【個人開発】純喫茶を気軽に探せる情報サイトを作りました

![スクリーンショット 2022-10-16 9.23.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2899752/1810558a-2a57-e799-e0b1-bba86c1925ee.png)

**近くの純喫茶を気軽に探せて、こだわりの条件でお店を絞り込み検索できる「純喫茶Trip」を開発しました**

**URL: https://junkissa-trip.link/**
**Github: https://github.com/harpseal-chan/JunkissaTrip**

# :information_desk_person:はじめに

はじめまして。HarpSeal([@azarashi_0424](https://twitter.com/azarashi_0424))と申します。

わたしは純喫茶巡りが趣味で、普段はGoogle Mapやグルメサイト、ウェブマガジンの特集を見ながら行きたいお店を探しています。

しかし、グルメサイトやGoogle Mapではチェー