Rails関連のことを調べてみた

Rails関連のことを調べてみた
目次

アプリパスワードが表示されないときの対処法

メール送信機能を実装させようとしたところ、
Googleの設定を変更し、アプリパスワードを取得しないといけないことがわかりました。

手順
①Googleアカウントにログイン
②セキュリティより2段階認証プロセスを有効に変更
③アプリパスワードを発行

この③の手順にてアプリパスワードを発行するためのボタンが消えていました

![スクリーンショット 2024-05-02 15.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/cbe0f3f1-b148-74e3-ce85-e6fafa9df8f1.png)

ただ、こちらのURLにアクセスするとアプリパスワードの発行ができ、
さらに該当の作成ボタンが出現しました。
どうやらGoogle側はこの機能をあまり使用してほしくないようです。

URL: https://myaccount.google.com/apppasswords

課題のためには必要かと思いますので、ぜひ試してみてください!

元記事を表示

【個人開発】ローマ字タイピング習得アプリ「しりとり画像ジェネレーター」の紹介(Rails, JavaScript)

# はじめに
はじめまして、Qiita初投稿です。
平([@tairanobuhiko](https://twitter.com/tairanobuhiko))と申します。
業界未経験からWeb業界への転職を目指し、効率的に学習することと高め合えるコミュニティを求めてプログラミングスクール(テックキャンプ)で学習を行なっています。

3月初頭から個人開発のオリジナルアプリを制作しましたので紹介したいと思います。

# アプリの概要
### アプリケーション名
**【しりとり画像ジェネレーター】**

URL

https://word-chain-image-generator.onrender.com/

GitHub

https://github.com/no215tyler/word_chain_image_generator

### アプリの特徴
– 「**ローマ字の学習も、タイピング練習もつまらない!**」という課題をもった小学校低学年層のユーザーが楽しみながら学習できる環境を提供します

# 企画背景

元記事を表示

RailsのRestClientで日本語のクエリが送れない

# はじめに

RailsでAPIを叩く時になぜか日本語のクエリだけがうまくいかなかったのでまとめます

# 問題

検索機能を作成しており、キーワードを使って他のAPIを叩く実装をしていました

“`rb
def get_contract_by_keyword(keyword)
return nil if company_name.blank?

url = UserApi.protocol + “#{UserApi.host}:#{UserApi.port}/v1/contract?keyword=#{keyword}”
p url

begin
res = RestClient.get(url)
data = JSON.parse(res.body)
“`

なぜか英語での検索はいけるのですが、日本語でAPIにリクエストがうまくいっていませんでした

# 解決方法

`RestClient`は以下のようにパラメーターを付与するようでした

“`rb
def get_contract_by_keyword(key

元記事を表示

Rails:dokcer-compose upでバックのコンテナが立ち上がらなくなったMysql2::Error: Failed to open the referenced table ‘users’の解決方法

RailsAPIモードでSAP化したdokcer-compose upで以下のようなエラーが出ました。
“`
backend-1 | Mysql2::Error: Failed to open the referenced table ‘users’
“`
usersのdb:migrateがうまくいかなかったので、srart.shの
“`
bundle exec rails db:create –trace
bundle exec rails db:migrate –trace
“`
の記述をコメントアウトして、そもそもdb接続しなくてもバックのコンテナが立ち上がるように設定しました 。
バックのコンテナが無事起動したところで
“`
docker-compose exec バックエンドの名前 /bin/bash

“`
でバックエンドに入り、
“`
rails db:migrate:status
“`
でステータスを確認
“`
rails db:rollback
“`
でロールバックを行い
“`
rails db:migrate
“`
で詳しい詳細を吐き

元記事を表示

いいね機能非同期化 落とし穴Part2

いいねの非同期化をしようとしたところ、
リロードしないといいねが反映されなくなってしまいました…
お手本通りしているはずなのにどうして!?
とコードを見返していると、気がつきました

“`favorites_controller.rb
class FavoritesController < ApplicationController def create @book = Book.find(params[:book_id]) favorite = current_user.favorites.new(book_id: @book.id) favorite.save end def destroy @book = Book.find(params[:book_id]) favorite = current_user.favorites.find_by(book_id: @book.id) favorite.destroy end end ``` そうなんです。favoriteがインスタンス変数でないのです。 最初い

元記事を表示

Railsでスクレイピングの環境構築してみた【Rails+Selenium+Heroku】

## はじめに
Rails環境かつ、Heorku環境でもスクレイピングをするための環境構築の備忘録。

ローカル環境でとりあえず動かすことはできても、連続してスクレイピングできなかったり、Heorku環境でスクレイピングができない問題がありました。

最終的にHeorku環境で動作させることができたので、参考になれば幸いです。

## やりたいこと

– Heroku環境でSeleniumのスクレイピングが機能するか確認するためのJobを作成すること

今回はwww.google.comにアクセスして、そのページのタイトルを返すものを作ります。
Googleというタイトルをスクレイピングするだけです。
(あくまで動作確認をするだけに徹しています)

## 環境構築
### Docker環境

元々DockerfileでChromeのインストールとChromeDriverをインストールしていたのですが、連続してスクレイピングできなかったり、Heroku環境で動作しなかったのでchromeのdocker imageを使用します。

この他、appやredis, sidekiqは適宜追加

元記事を表示

いいねの非同期化 落とし穴Part1

いいねの非同期化を実装し、課題も提出完了していたものの…
クリックしていない投稿も画面が変わってしまうことが発覚

![スクリーンショット 2024-04-30 15.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/98d824c9-0c8d-03f7-7f6a-42cda1174603.png)
![スクリーンショット 2024-04-30 15.04.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/0efb08fc-411d-1ae2-d531-bb9727e6a606.png)

問題だったのはこの箇所↓

“`create.js.erb
$(‘.favorite-btn’).html(“<%= j(render 'favorites/favorite-btn', book: @book) %>“);
“`
createやdeleteを実行したときのjs.erbファ

元記事を表示

Ruby on Railsのyaml.h not found解決方法(Windows11)

# STEP 0
基本的なインストールは、こちらの記事を参考に

https://qiita.com/tks_00/items/711a022c6234fc495724

ただ、新規プロジェクト作成時にyaml.hが無いというような以下のようなエラーが出たので修正
~~~
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/installer/parallel_installer.rb:123:in
`block in worker_pool’
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:62:in `apply_func’
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:57:in `block in
process_queue’
C:/Ruby32-x64/lib/ruby/site_ruby/3.2.0/bundler/worker.rb:54:in `loop’
C:/Ruby32-x64/

元記事を表示

まとめ – Playwright による E2E テスト + VRT差分レポートを活用する

# 前提

– フロント ( Nuxt React など )
– バックエンドAPI ( Rails Node など )

というようなフロントバックエンド構成のWebサービスの話

# E2E テストは何が良いのか?

世の中のテストの種類は

– E2E 的なテスト
– 部品のテスト ( 関数やComponent など )

に大きく分かれると思うが、自分の場合はサービスの最終的な品質保証がしたいので、後者のE2Eテストを重視している

そもそものE2Eテストのメリットだが、何より「ほとんど全てをテストできる」というところが良い。
フロント・バックエンド構成で言えば、その全てを合わせた結合テスト、一連のテストが出来るのだ。

# Playwright で E2E テストをしよう

E2E テストには Playwright というテストフレームワークを使っている

https://playwright.dev/

ヘッドレスでブラウザ操作をしてその結果をテストしたり、画面のスクリーンショットを撮影したり、操作動画を撮影したりできる

たとえば

– URL指定でログインフォームに

元記事を表示

Ruby on Rails: Ransackを用いたモデル検索のエラー解決方法②

この記事では、Ruby on RailsでRansackを使った検索機能の設定方法について説明します。前回の記事では、Ransackの設定と関連するモデルへのホワイトリストの追加を行いました。今回は、フォームから送信されるパラメータに対する処理の方法と、検索結果を正しく絞り込むための対策に焦点を当てます。

## 前回の記事

https://qiita.com/KM9973/items/92ef1698202dc9a89681

## 背景

Railsアプリケーションで、`Reservation`モデルに対して、顧客単位で検索を行う必要がありました。しかし、Ransackの設定やビューからのパラメータ処理に問題が生じ、検索が正常に動作しないという課題がありました。

## エラー内容

フォームから検索を行うために、以下のように設定しました:

“`ruby
<%= search_form_for @r, url: reservations_path, method: :get, local: true, class: 'custom-form-group d-flex' do

元記事を表示

Ruby on Rails: Ransackを用いたモデル検索のエラー解決方法①

この記事では、Ruby on RailsでRansackを使ってモデルの検索を行う際に発生したエラーの解決方法について説明します。特に、関連するモデルの属性に対する検索のためのホワイトリストの設定や、カスタム検索の実装について触れます。

## 背景

Railsアプリケーションで、`Reservation`モデルの検索を行い、予約をした顧客単位で検索する必要がありました。しかし、Ransackの設定や関連するモデルへのアクセスに問題が発生し、検索フォームが正しく動作しないという課題が生じました。

## エラー内容

Reservation検索を実装するために、ビューで以下のようにフォームを設定していました:

“`ruby
<%= search_form_for @r, url: reservations_path, method: :get, local: true, class: 'custom-form-group d-flex' do |form| %>

元記事を表示

バージョン指定して特定のマイグレーションファイルを削除する、ついでにNO FILEのマイグレーションファイルも消す

# はじめに
あんまりつかうことがないので忘れがちなマイグレーションファイルの削除について….

## statusでみる

“`
& bundle exec rails db:migrate:status
“`

“`
up 202312250xxxx Delete hoge
up 202401091xxxxx Add hoges
up 20240207xxxxxx Change hoge body
up 2024030xxxxxxx Add hoge messsage
“`

## 消す
“`
up 202312250xxxx Delete hoge
up 202401091xxxxx Add hoges // これを消す
up 20240207xxxxxx Change hoge body
up 2024030xxxxxxx Add hoge messsage
“`

downする
“`
$ bundle exec rails db:down VERSION=202401091xxxxx

元記事を表示

GraphQL Rubyでfieldを共通利用したい

graphql-rubyを利用する際、複数のObjectで同一のfieldを共通利用したくなりました。
下記手順で、Interfaceを利用して実現できました。

1. BaseInterfaceを定義する
2. 共通利用したいfieldをまとめたInterfaceを定義する
3. fieldを定義するObjectでInterfaceをimplementsする

なお公式ドキュメントは下記です。詳細はこちらをご参照ください。
https://graphql-ruby.org/type_definitions/interfaces

# 0. Interfaceとは

> Interfaces are lists of fields which may be implemented by object types.

Interfaceとは、Objectによって実装することができるfieldのリストです。

# 1. BaseInterfaceを定義する

これから定義するInterfaceにおいて、その基底となるBaseInterfaceを定義します。

“`ruby:types/b

元記事を表示

good_jobを導入して定時実行のジョブ(cron)を実装する手順、全体像

# 実装に必要な最低限の知識

good_jobとは
Ruby on Railsアプリケーションでバックグラウンドジョブを実行するためのGemです。

https://github.com/bensheldon/good_job

good_jobはActive_jobを基本としているので、忘れていたらActive_jobについてさらっと目を通すと理解が深まります。

https://railsguides.jp/active_job_basics.html

# 実際の手順

未来の自分のために手順をそのまま残しておきます。

## 初期設定

### gemを導入
“`Gemfile
gem ‘good_job’
“`

“`terminal
bundle install
“`

### good_jobがRailsアプリケーションに統合されるための初期設定
ターミナルでコマンドを実行します。
“`terminal
bundle exec rails generate good_job:install
“`

このコマンドで、いくつかファイルが

元記事を表示

ActiveRecord::Relationにおける present? exists? blank? empty?

## 結論

– 条件に合致するレコードが1件以上存在するかどうかを確認したい場合
– `exists?`メソッドを使う
– 条件に合致するレコードが1件も存在しないかどうかを確認したい場合
– `empty?`メソッドを使う

## 使用データ

“`rb
irb(main):001> ExternalUser.all
ExternalUser Load (2.1ms) SELECT `external_users`.* FROM `external_users`
=>
[#]
“`

## 実行結果

元記事を表示

GoogleアカウントのPWを変更したらGmail送信に失敗するようになった Net::SMTPAuthenticationError (534-5.7.9 Application-specific password required)

## 困ったこと
RailsアプリでGmail送信が失敗するようになりました。
どうもGoogleアカウントのログインパスワードを変更したことが影響している模様。
以下のようなエラーが出ていました。

“`
Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted)
“`

“`
Net::SMTPAuthenticationError (534-5.7.9 Application-specific password required)
“`

## 分析、整理

`Net::SMTPAuthenticationError`はRubyのクラス。
https://docs.ruby-lang.org/ja/2.2.0/class/Net=3a=3aSMTPAuthenticationError.html

`534-5.7.9 Application-specific password required`
はどうやらGoogle関連のエラーの模様。アプリケーションのパスワードが必要だぞ。と

元記事を表示

PlaywrightをRailsに導入して手動テスト工数を減らす

## 対象者
– Cypressを使ったテストを書いたことがある人
– RailsのRSpecを使ったテストを書いたことがある人

## 手動テスト辛い
私が担当している案件の中には、1年以上運用しているwebサービスがあります。
フロントエンド・バックエンド共に存在します。
課題は色々あるのですが、一番課題に感じているのがテストです。

そのサービスの前回の機能追加リリース時は、画面操作系のテストは手動で行いました。
そうなってしまった理由は大きく分けて以下3点です。

– 画面操作系の自動テストを書く時間がない
– 手動テストした方が早いという考えがある
– 今の画面操作系自動テストの仕組みでは画面操作後のDB値チェックができない

この問題をなんとか解決したいという思いがあります。

## 単体テストが一番重要
まず大前提の話です。
単体テストとは、関数やメソッド単位での機能が期待通りであるかのテストです。

これまで色々とバグや障害に遭遇してきた訳ですが、振り返ってみるとほとんど単体テストをやっていれば事前に解決できるものばかりです。

私が以前読んだ以下本には、**それは

元記事を表示

Bootstrapでフッターを下部に固定したいときの書き方

# はじめに
Bootstrap4.6を使用してサイトを作成した際に、<​body><​/body>の中のコンテンツが少ないと中身に合わせてフッターの位置が上に上がってしまっていました。
こんな感じです。

![2024-04-30-Bootstrapのフッター02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762011/ea446814-ad5a-94c1-b1cf-b41ec06f948a.png)

下に空間があってなんとなくかっこ付かないので、この表示を解消する方法を探してみることにしました。

# ちょっと違う…となったやり方
「Bootstrap フッター 固定」というような内容で検索して良く見つかるのが「fixed-bottom」を設定するという方法です。
実際にfotterタグの部分に追加してみました。
“`html:app/views/layouts/_footer.html.erb

【個人開発】メモ帳感覚で使えるGitHub草生やしアプリ「Leaf Record ~大草原不可避~」を作りました【Next.js×Rails】

# はじめに
こんにちは、とぴ([@topi_log](https://qiita.com/topi_log))と申します。
オンラインプログラミングスクールにてRuby on Railsをメインに学習しつつ、自主学習としてフロントエンドも勉強しています。
4/26にメモ帳感覚で使えるGitHub草生やしアプリをリリースしたので、アプリ紹介と技術、感想をまとめさせていただきます。

# 目次
1. 作成経緯
1. Webアプリ紹介
1. 技術スタック
1. こだわったところ
1. UI/UX
1. 技術面
1. その他
1. 改善点・不具合
1. 追加したいと考えている機能
1. ブラッシュアップの方針
1. 感想

# 1. 作成経緯
オンラインプログラミングスクールにて、「ミニアプリweek」という短期間でアプリを作るイベントがあります。バグOK、一機能だけでもOKとゆるめのイベントで応募するために作成したものです。
4/22に開発を開始、4/26にリリースしたので制作期間は5日ほどですが、そのあとも順次ブラッシュアップしています。

# 2. Webアプリ紹介

元記事を表示

Railsチュートリアル第9章学習まとめ

## 9章

最近のWebサービスでは、ユーザーのログイン情報を任意で記憶しておき、ブラウザを再起動した後でもすぐにログインできる機能をremember meと言う。

永続cookie(permanent cookies)を使ってこの機能を実現していく。

ユーザーのログイン情報を長期間記憶する方法にを学ぶ。
その後、[remember me]チェックボックスを使って、ユーザーの任意でログイン情報を記憶する方法について学ぶ。

ということはレイヤーとして
・長期保存する機能
・ユーザーの任意で保存するかどうか決める機能
この2つがあるということですね。

## 9.1Remember me 機能
この機能を使うと、ユーザーが明示的にログアウトを実行しない限り、ログイン状態を維持することができるようになる。
ログインフォームにログインを継続するかどうかのチェックボックスも入れる。

## 記憶トークンと暗号化
Railsのsessionメソッドを使ってユーザーIDを保存しましたが、この情報はブラウザを閉じると消える。本節では、セッションの永続化の第一歩として記憶トークン(remembe

元記事を表示

OTHERカテゴリの最新記事