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

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

elasticsearchのrefreshに関して

## はじめに
elasticsearchには[Refresh API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html)なるものが存在する。
ドキュメントをインデックスしたら即検索できるようになると考えていた自分は、このrefreshを意識せずelasticsearchを使用していたため、elasticsearchの絡むテストを書くときにハマりかけた。今回はrefreshに関する備忘録を残しておく。

## なぜrefreshが必要なのか?
前提として、elasticsearchではドキュメントをインデックスしただけで検索可能な状態になるわけではない。追加されるドキュメントは一旦In-memory bufferという領域に溜め込まれた上で、まとめて検索対象にとして反映されるようになっている。
このIn-memory bufferに溜め込まれたドキュメントを検索対象として反映する処理がrefreshと呼ばれている。

https://www.elastic.co/g

元記事を表示

フォロー機能と同じテーブル構造で複数チェックボックスの管理方法を考えてみた

# 実現したいこと
同じテーブル同士で1つのに対して、複数の同じテーブルのレコードを紐づけてチェックボックスで登録できるようにする。
例えば、
– ユーザーの一括お気に入り機能
– 一括ブロック機能
– アイテムをひとまとめにするアイテム

などが挙げられます。

記事にした経緯として、
– 探しても実装事例が全く見つからなかった
– この発想に至るまでハマって時間を無駄にした

というものからです。

### 開発環境
– Ruby 3.0.2
– Rails 7.0.3.1

### オーソドックスな管理方法
よくある例として車とパーツの関係でテーブル設計をしてみました。
利用例としては、車に対して装着したいカスタムパーツにチェックを入れる想定です。

※ストロングパラメーターの設定は、実装例が多くあるため割愛しております。

### テーブル設計
cars
| カラム名 | 型 |
| —— | —— |
| id | integer |
| name | string |

car_parts
| カラム名 | 型 |
| —— | –

元記事を表示

【Rails】Could not open library ‘libvips.so.42’解消法

## 状況

ActiveStorageで画像処理をしたところ以下のようなエラーが発生しました。

“`terminal
LoadError: Could not open library ‘vips.so.42’: vips.so.42: cannot open shared object file: No such file or directory.
Could not open library ‘libvips.so.42’: libvips.so.42: cannot open shared object file: No such file or directory
“`

## 解決方法

`libvips42`をインストールしたところ解消しました。

“`terminal
apt-get update -qq && apt-get install -y –no-install-recommends libvips42
“`

元記事を表示

Rspecで複数モデルの個数の増減を1つのテストで検証するには

# はじめに
Rspecを追加していて、1つのテスト項目で複数のモデルの個数が増えていること・変化しないことを検証する必要がありました

その時に便利なものを見つけたのでメモで残します

## 背景
userを消したときに紐づくSNSの中間テーブルは削除、紐づくSNSアカウントは削除しないという処理がありました

##### 具体的な例
以下のようなuserテーブルを削除したときのモデルの個数を検証するテストでした

“`models/user.rb
has_many :youtube_certs, dependent: :destroy
has_many :youtube_users, through: :youtube_certs
has_many :instagram_certs, dependent: :destroy
has_many :instagram_users, through: :instagram_certs
has_many :twitter_certs, dependent: :destroy
has_many :twitter_users, throug

元記事を表示

APIとはそもそもなんぞや

# APIとはそもそも何ぞや
APIとは他社が提供するサービス内の情報や機能を扱えるようにする仕組み
リクエスト<=>レスポンス

# RESTful API
RESTful APIとは・・・4つの原則から成り立ってる

– アドレス可能性

バラバラのURIより1意のURI目指そうぜ。
(ご飯、パン、味噌汁じゃなくて、食料みたいな)

– ステートレス可能性

すべてのリクエストが完全に分離してセッション管理など行われていないこと。
(渡されたレスポンスを前提にしない)

– 接続性

情報に「別の情報へのリンク」を含めることができることを指し、リンクを含めることで別の情報に接続することが可能になる。

– 統一インターフェイス

情報の取得、作成、更新、削除といった操作一式はすべてHTTPメソッドを利用。

元記事を表示

Renderデプロイ時の! Unable to load application: ArgumentError: Missing `secret_key_base` エラーの対処法

# 概要
個人開発の際Renderでデプロイしようとしたところ
“`ruby
! Unable to load application: ArgumentError: Missing secret_key_base for ‘production’ environment, set this string with bin/rails credentials:edit`
“`
というエラーが発生し苦戦したので備忘録として残しておきます。
※初学者で知識に乏しいため誤った記述があればコメントいただけると幸いです。
## secret_key_baseとは
Railsのアプリケーションでは、“secret_key_base“というシークレットキーが必要です。これは、暗号化やセッションの検証など、さまざまなセキュリティ関連のタスクで使用されます。production環境で、このキーが設定されていないことが原因で今回のエラーが発生しました。
## 対処方法
対処方法は簡単です。
ローカル環境で、以下のコマンドを実行してRailsのクレデンシャルを編集します。
“`ruby:bash

元記事を表示

文系大学生がスタートアップに新卒入社して半年経ったので振り返る

こんにちは!ジャックです!
外国語大学の23卒として今年の4月に都内のスタートアップに入社し、半年ほど経過したのでどんな業務を行なってきたか振り返ろうと思います。

## 前提
新卒として入社したとはいっても内定者インターンで一年弱働いておりました。
エンジニアとして全くのノースキルで入社したというわけではないのでご承知おきください。入社時のスペックを以下に書いておきます。

* 内定者インターンとしてRailsでAPI開発を担当(1年弱)
* Web制作会社でインターン経験あり(1年強)
* 0→1のMVPまでの新規開発
* Reactで個人開発の経験がはあるが、実務経験はない
* API, DB設計は数回行ったことがある
* インフラはさっぱりわからない
* 実務で使用したことのある技術: Ruby, Rails, Rspec, HTML, CSS, WordPress, jQuery, Git, GitHub

バックエンドの開発はたまに先輩にサポートいただきながらですが、ある程度一人称で開発ができる程度のレベルでした。

API以外にもJobやメーラーの作成などバックエンドのタ

元記事を表示

初投稿

#初の投稿
##チーム開発を終えて教わったところを投稿できたらいいと思います。
###自分のポートフォリオの作成の合間になにかしたかったので…

元記事を表示

【Rails】TimeZoneを使えば中学地理の時差計算は満点

# はじめに
先日`Time.current`を使う機会があり、これを出力してみると以下のような結果が出ました。
“`
Sun, 24 Sep 2023 23:27:44 JST +09:00
“`
`JST`とは日本標準時(Japan Standard Time)
`+09:00`とは世界標準時から+9時間の時差がある という意味です。

ふと、こんなことを考えました。

**「これ、日本以外の時差も見れんじゃね?」**

2つの方法があるのでハワイの時差を例に出して紹介します。

## 方法1                      `config/application.rb`で          `config.time_zone = ‘○○’`を変更する

手順は以下の通りです。

#### 手順1
`config/application.rb`で`config.time_zone = ‘○○’`を特定の地域名に変更する
“`config/application.rb
config.time_zone = ‘Hawaii’
“`

#### 手順2
`pp`で

元記事を表示

【Ruby】知っておくといつか役立ちそうな配列・ハッシュのメソッド6選

## はじめに
もうすぐ入社1年になるエンジニアです。
最近、開発チームの勉強会で「良いコード悪いコード」という本を読みました。その本の、コレクション(※)に関する説明で、車輪の再発明をせずに標準ライブラリに用意されているメソッドを使おうと書かれていて、確かにあるものは使うべきだなと思いました。
そこで、配列とハッシュのメソッドを調べてみたので、知らなかったけど使う機会がありそうなメソッドや知らない人は車輪の再発明してしまいそうなメソッドを6つ紹介しようと思います。

※ コレクション:複数のデータをまとめて格納するためのデータ構造。rubyでは、配列やハッシュなどがある。

## 配列・ハッシュ共通のメソッド

### `select`メソッド
selectメソッドは、配列の各要素に対して条件式を満たす要素のみで構成される新しい配列を返します。ハッシュの場合も同様です(例を参照)。

“`
# 基本構文
配列.select { |変数| 条件式 }
ハッシュ.select { |変数1, 変数2| 条件式 }

# 配列の例
array = [1, 2, 3, 4, 5]
new_

元記事を表示

Dockerを使ってrails6の環境を構築する

## はじめに
Dockerを使ってRailsの環境を構築しようと思います。

## 前提
`ruby 3.0.6`
`rails 6.1.0`
`node 14.x`

### Rails new
最初にrubyの環境を整えてからrailsをインストールします。

“`dockerfile:Dockerfie
FROM ruby:3.0.6

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

WORKDIR /myapp
“`

“`yml:docker-compose.yml
version: ‘3’
services:
db:
image: postgres
volumes:
– ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash
volumes:
– .:/myapp
ports:
– “3000:3000”
d

元記事を表示

Webpacker::Manifest::MissingEntryErrorの解決方法

## 【開発環境】
Ruby 2.7.5
Rails 6.1.7.6

### どういう時にエラーが発生したか
1. Railsで新規アプリケーションを実装した際、users_controller.rbを新規作成
1. indexアクションを定義後、`app > views > index.html.erb`を新規作成
1. rails sコマンドで立ち上げた際に、以下のエラーが作成した。

※以下のようなエラーのキャプチャ
![スクリーンショット 2023-10-02 6.16.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568360/bb86f239-2f7a-660e-b3a2-3533b8a1297a.png)

### エラー解決のためにやったこと
[Webpacker::Manifest::MissingEntryErrorが発生]https://qiita.com/kndknd/items/18187f1c2199651d08d5
上記のサイトでは以下の2コマンドでOKとのこと

元記事を表示

Deviseで複数モデルを使用したログインの実装

## やりたいこと
親ユーザーの認証ではデフォルトのemailとpasswordでの認証を使用してログイン。
子ユーザーの認証では、nicknameとパスワードで登録と認証ができるようにする。
また、子ユーザーを作成できるのは、親ユーザーのみ。
family(親ユーザー)
|colum|validation|
|:–|:–:|
|email|null:false|
|password|null:false|
|family_name|null:false|

user(子ユーザ)
|colum|validation|
|:–|:–:|
|nickname|null:false|
|password|null:false|
|family_id|null:false|

## 手順
#### root用のコントロ3ーラーとビューを作成
“`rails g controller home index“`
“`ruby:home_contoroller.rb
class HomeController < ApplicationController def index e

元記事を表示

【備忘録】Railsのheadメソッドでよく使うステータスコードと対応するシンボル

:::note info
Railsのheadメソッドについて。
headメソッドは、応答ステータスとヘッダのみを出力してくれるメソッド。以下で各ステータスコードごとの意味とシンボルを表で整理しました。
:::

| ステータスコード | HTTP コード | 意味 |
|:—————|:———–|:—–|
| `:ok` | 200 | 成功の意味。主にGETリクエストの成功を示すのに使用されます。 |
| `:created` | 201 | リソースの作成が成功したことを示す。主にPOSTリクエストの成功を示すのに使用されます。 |
| `:accepted` | 202 | リクエストが受け入れられたが、まだ処理されていないことを示す。 |
| `:no_content` | 204 | リクエストは成功したが、返す内容がないことを示す。主にDELETEリクエストや、PUT/PATCHリクエストの成功

元記事を表示

has_many, belongs_toでインスタンスメソッドを定義している件について

# はじめに
初めまして! 
私はRUNTEQでRuby on Railsをメインに勉強しています。
今回は私が関連付け(アソシエーション)の学習の過程で見落としてしまったが故に、後に苦労したことについて記録しておこうと思い、本記事を執筆しています。

# 本題

早速ですが、今回お伝えしたいのは次のようなことになります。

**関連付けの際、has_manyやbelongs_toで指定したものはインスタンスメソッドとして使える。**

例えば、一人のユーザーが複数のポストを投稿できるようにするという状況を仮定します。モデルにはUserとPostがあり、両者を関連付けします。関連付けには色々と手続きが必要ですが、その中でmodelsディレクトリには次のように書くでしょう。

“`Ruby:app/models/user.rb
has_many :posts, dependent: :destroy
# dependent: :destroyは本記事では重要ではありません。
“`
“`Ruby:app/models/post.rb
belongs_to :user
“`
このとき

元記事を表示

Rubyで使われる%w記法(配列がいっぱいある時にめっちゃ便利!)。知っていたら実務で最強!

# この記事の背景
現場RSpecでテストを実装している時に、テストデータが以下のようになっていました。
(以下のサンプルは例で実際の現場のものではないです)
“`spec.rb
:abc=>[“1900”, “株式会社nori”, “inu town【1900】”, “ロンドン”, “福岡2-9-11”, “カフェ”, “30”, “中村”, “2”, “山口”, “03-4578-5598”, “20221124”, “1689”, “5”],
“`
このような配列がある時に、RuboCop(コード解析ツール)を使用した時に、配列が多すぎる!
と怒られてしまいました。実際人間の目から見ても見づらいです。
***現場では自分がいなくなった後の人がコードを読みやすくしなければいけない***ので
修正する必要が出てきました。

その時に“`%w“`の書き方を学びました。

# %w記法とは
***配列を作成したいときに「[ ]」(ブラケット)や「” “」(ダブルクォーテーション)を省略して記述する***ためのRubyの書き方です。コードの可読性(読みやすくなる)がよくなり、コ

元記事を表示

Rails7 link_toで”turbo-method: :post”を設定しているのにGETのHTTPメソッドとして認識される

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0

## 解決したい内容
* 以下のように`turbo-method: :post`を設定している`link_to`タグにおいて`[POST]`メソッドではなく、`[GET]`メソッド扱いされる。

“`erb
<%= link_to hoge_path(hoge), data: { turbo: false, "turbo-method": :post } %>
“`

“`

Routing Error
No route matches [GET] “/hoge”
“`

## 解決手順
* `turbo: false`と`”turbo-method”: :post`は共存できない。`turbo: false`の記述を削除して、以下のようにすることで解決。
“`erb
<%= link_to hoge_path(hoge), data: { "turbo-method": :post } %>
“`

## 補足
* link_toはデフォルトでは`[

元記事を表示

Rails7 Bootstrap slimのfile_fieldの見た目をアイコンにする

This article shows how to change the appearance of slim’s file_field to Bootstrap icon.

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0
* Bootstrap 5.2.3
* テンプレートエンジンとしてslimを使用

## 解決したい内容
* formタグの中のfile_fieldの見た目を以下の①通常の見た目でなく、②アイコンの見た目にしたい

①通常の見た目
![通常のfile_field.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/67393a91-ff95-26cc-0d80-425007138bfd.png)

②アイコンの見た目(画像左のimageアイコンをクリックして画像添付としたい)
![iconに変更したfile_field.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

【Rails】devise-token-authを用いたユーザー登録機能の作成

devise_token_authを用いたログイン機能の実装を備忘録として残します。

・Gemファイルの準備/インストール

Gemfileにdevise_token_authをGemに準備する。
以下の内容をGemfileに記載し、`bundle install`を行う。

“`ruby:Gemfile
gem “rack-cors”
gem ‘devise’
gem ‘devise_token_auth’
gem ‘devise-i18n’
“`

下記の2つのコマンドを実行することで、devise_token_authをインストールする。
“`
rails g devise:install
rails g devise_token_auth:install User auth
“`

・ログイン機能の実装

まずは認証のコントローラーを準備するため、下記のコマンドを実行する。
“`
rails g controller api/v1/registrations
“`
できたコントローラーファイルを下記のように修正する。
classを設定することで、Devis

元記事を表示

Rails7 Heroku OmniauthのGitHub認証の際に”OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch”エラーが発生する

This article shows how to resolve CallbackError when GitHub authorizing at Heroku.

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0
* 開発環境
* Docker使用
* 本番環境
* Herokuにデプロイ(stack heroku-22)

### gem
* devise 4.9.2
* omniauth 2.1.1
* omniauth-github 2.0.1

## 解決したい内容
* ローカルの開発環境でOmniauthによるGitHub認証ができることを確認済み。
* Heroku本番環境においてGitHub認証を実行すると、以下エラーが発生してGitHub認証に失敗する。
* `”OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch”`

## 解決手順
* `config/initializers/devise.rb`に以下を追記する。`https://hog

元記事を表示

OTHERカテゴリの最新記事