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

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

Railsのcollection_selectの使い方

毎回調べているので備忘録として。

以下のような構成になっている。

“`erb
<%= collection_select(対象となるモデル名, paramsに贈りたいモデルのカラム, 選択肢として表示されるモデルのレコード(配列), 選択肢として表示されるモデルのカラム, { prompt: "何もも選択されていない場合に表示される文字", select: 選択済みのレコード }) %>
“`

具体的には以下のように使う。

“`erb:edit.html.erb
<%= collection_select(:product, :id, @products, :id, :name, { prompt: "商品名を選択してください", select: @product }) %>
“`

元記事を表示

【Ruby on Rails】devise_invitableを使った既存ユーザーへの招待機能の実装

# はじめに
この記事は、初学者がgem「devise_invitable」のカスタマイズに挑戦してみた記事です。チーム(グループ)があるアプリで、新規ユーザー/既存ユーザーのどちらにも招待メールを送り、招待されたユーザーがパスワードを登録した時にチームに所属できるようにしています。
***この記事ではdevise_invitableの基本的な実装方法は説明していません。実装済みを前提としています。**

# 経緯(読み飛ばしても?‍♀️)
Dive Into Codeというプログラミングスクールの卒業課題で「複数人でタスク管理を行うアプリ」を作成しました。簡単なアプリ紹介としては、複数人が所属するチームを作成し、そこでタスクを管理を行うというものです。
招待したい人に「このチームに入ってよ!」と招待メールを送ることができたらいいなと思い、gem「devise_invitable」を使用することにしました。
##### しかし、問題が。。?
アプリのイメージとしては1人のユーザーがたくさんのチームに所属できるというものだったのですが、デフォルトのdevise_invitableの機能

元記事を表示

ユーザー名にバリデーションをつける

# プロゲートで簡単なバリデーションを行なっていた。
“`rb
lass User < ApplicationRecord has_secure_password validates :name, {presence: true} validates :email, {presence: true, uniqueness:true} . . . end ``` # 目標 * railsガイドで書かれているバリデーションを実行する。 * バリデーションで引っ掛かったらエラーメッセージを表示させる。 まだこれからだけど 送信ボタンを押した時もバリデーションを実行できそうだ。 これは後から考える。 とりあえず同期しながら簡単なことを行なっていく。 # 目的と合うバリデーションオプション ### ```:on```オプション バリデーションのタイミングを指定 ```:on```オプションはバリデーションを実行するタイミングを指定し、 ```:create```または```:update```のいずれかの値を取ります。 ### ```:message```オプション err

元記事を表示

Docker Rails7 apiモード mysqlでGraphqlを使用する方法

# 記事の内容
Graphqlをキャッチアップするにあたって、そもそもなんでGraphqlを使用するのか? からはじめました。
また、学習するにあたって初めて聞くような単語がたくさんあったので、メモがてらこの記事にまとめていこうと思いました。
この記事ではDockerでの環境構築からuserのindex,show,createまでを記載しようと思います。

# Graphqlとは?
さっそくですが[参考](https://udemy.benesse.co.jp/development/system/graphql.html)がとてもわかりやすかったのです。GraphQLを導入した有名なサービスも紹介されており面白いです。
API用のクエリ言語であり、REST APIではサーバ側で返すデータ構造等を決めていたが、実際にデータを使用するクライアント側で自由にデータを取得できます。
今日のスマホやSPAでは複雑なデータを扱うことが多いため、注目されている。

### メリット・デメリット

#### メリット
– フロント側でレスポンスの形式を指定できる
– 必要なデータのみ取得でき、オ

元記事を表示

ActiveJobで実装したデータ取り込みジョブを2.2倍高速化した

PubAnnotationという文章への注釈を管理するWebアプリケーションがあります。
このアプリケーションには注釈のついた文章データを一括アップロードする機能があります。
7万文章をアップロードすると7時間掛かります。この処理を高速化するために工夫しました。

PubAnnotationはRuby on Railsで実装されたWebアプリケーションです。
一括アップロード機能は、ActiveJobで実装され、Sidekiqで実行されているバッチ処理です。

## 結果

最初に結果を示します。
文章をアップロードしたときの平均アップロード数です。
文章によってデータ量がちがいます。2000~2500程度の文章をアップロードして平均を取りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15964/8b407a4e-2e6d-9f86-62d6-8b0966b88d14.png)

縦軸が1秒当たりのアップロード文章数です。横軸はアップロードした文章数です。
次の三つの修正

元記事を表示

コミット→プッシュ→マージ

# コミットまで

1.現在のブランチを確認
“`git
$ git branch
“`

2.ブランチを切ってそのブランチに移動
“`git
$ git checkout -b (作成するブランチ名)
“`

3.作業を行う

4.修正したファイルの確認
“`git
$ git status
“`

5.ソースコードを確認
“`git
$ git diff
“`

6.全てステージングに追加する
“`git
$ git add -A
“`

7.コミットを行う
“`git
$ git commit -m “コミットメッセージ”
“`

8.コミットログを確認
“`
$ git log
“`

# プッシュをおこなう

1.githubへプッシュ
“`git
$ git push origin 現在のブランチ名
“`

# マージを行う

1.masterブランチに移動
“`
$ git checkout master
“`

2.masterブランチへマージ
“`
$ git merge マージしたいブランチ名
“`

3.リモートブランチの

元記事を表示

Github ActionsでECSに自動デプロイできているのに想定通りの挙動にならなかったエラーをご紹介

# 本記事について
本記事は、先日Github ActionsにてECSへCI/CDパイプラインを構築した際に自身がハマってしまった2つのエラーについて備忘録も込めて記載します。
GitHub Actionsではエラーにならずに通ったものの、サイトを確認してみると想定通りの挙動になっていなかった部分となります。
※初学者のため、間違い等ございましたらご指摘いただけますと幸いです。

# 環境
– MacOS: Ventura13.0.1
– Ruby:3.12
– Rails:7.0.4

# ①Railsの環境変数Master.keyの不足によるエラー
ポートフォリオの作成中、まずCircleCIでパイプラインを構築したのちに、Github Actionsに移行したので、そこまで大きいエラーはないと思っていましたが、エラーに遭いました。

## 起きた事象
Github ActionsではエラーにならずECRへpush後、ECSへデプロイできていましたが、サイトを開くとfrontendとbackendの通信がうまくいっていなかったです。
“`java:cloudwatch log

元記事を表示

Railsのcolumn名の変更

Railsのカラム名を間違ってmigrateしてしまったので修正方法を書いておきます。
自分の理解度を高めるためのアウトプットです。

//誤りの記述
rails g model User nam:string age:integer
カラム名をnameにしたかったがnamにしていた。

db:migrateの前に修正すればよかったが、気づかずmigrateしてしまった。

なので以下の処理を実施
1.migrationファイルを作成
$ rails generate migration rename_[変更前のカラム名]_column_to_[モデル名(複数形)]

2.migrationファイルを編集
生成されたファイルにchangeメソッドを追加し、そこに変更したいカラム名を記述する。
rename_column :テーブル名, :変更前のカラム名, :変更後のカラム名

class RenameNamColumnToUsers < ActiveRecord::Migration[7.0] def change rename_column :users, :nam,

元記事を表示

gemとbundlerについて

# はじめに
gemとbundlerについて、
ちゃんと理解できていなかったので、備忘録としてまとめる。

## gemとは
gem形式にパッケージングされたRuby用の外部ライブラリのこと。

gem形式とは
外部ライブラリのフォルダやファイルをgem形式(.gem)という1つのファイルに(パッケージング)まとめたもののこと。
参考:
https://pikawaka.com/ruby/how-gem-works#gem(gemパッケージ)とは

ライブラリとは、汎用性の高い機能を他のプログラムで呼び出して使えるように部品化して集めたファイルのこと。
ライブラリには大きく分けて標準ライブラリ、組み込みライブラリ、外部ライブラリの3種類あり、
gemは外部ライブラリにあたる。

備考:
Railsもgemパッケージとして提供されている。
他にも有名なgemとしては、ユーザ認証を簡単に実装できる「devise」、ページネーションを簡単に実装できる「kaminari」がある。

## RubyGemsとは
Rubyのパッケージ(gem)を管理するシステムで、Ruby1.9以降から標準ライ

元記事を表示

【2023年版】Turboを有効化したままRails 7.0でDeviseを使う方法

## はじめに
Rails 7.0がリリースされて1年以上経ちましたが、Railsのメジャーな認証ライブラリであるDeviseは未だにRails 7.0に部分的にしか対応していません([参考](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md#481—2021-12-16))。
そのため、Rails 7.0で`rails new`したRailsアプリケーション(つまり、Turboが有効になっている状態)だと、Deviseを使おうと思っても意図しない挙動になります。

そこで、この記事ではTurboを有効化したままRails 7.0でDeviseを使う方法を紹介します。

なお、ネットを検索するとこの記事と同じテーマで書かれた記事がすでにいくつもありますが、今回紹介する方法はかなりシンプルかつ、実際のサンプルアプリ(とテストコード)で動作確認済みなので、個人的にはかなりお勧めです。

## 対象バージョン
この記事は以下のバージョンで動作確認しています(それぞれ2023年1月4日時点での最新バージョンです)。

元記事を表示

Ruby on RailsのアプリにLINEを組み込む。

## はじめに
– 今回は[【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)で実装したLINEログインとLINEbotについての解説記事になります。

## Lineログイン機能について
### Railsアプリの作成
まずはじめに アプリを作成していない方は`rails new`してアプリを作成してください。

### Deviseの導入
LINEログイン機能を実装する前にまずはDeviseでログイン機能を実装していきます。

“`ruby:Gemfile
gem ‘devise’
“`

Gemfileに記載が完了したら、`bundle install`を実行

次に、ターミナルで以下を実行し、Deviseを使えるようにしていきます。
“`terminal:ターミナル
rails g devise:install
rails g devise User
rails db:migrate
“`

ここまで問題なく実行できれば、`rails s`でサーバを立ち

元記事を表示

Rails 7.0にバージョンアップしたらquery_log_tagsを有効化しよう

# Profit
– verbose_query_logs = true でない環境でrails serverのログが少し追いやすくなる
– ActiveJobを使っている場合はジョブのログも
– スロークエリログの発生箇所が少し特定しやすくなる

# How to
Railsアプリケーションの設定に以下を追加するだけ

“`rb
config.active_record.query_log_tags_enabled = true

# カスタマイズする場合は `query_log_tags=` を使って指定可能
config.active_record.query_log_tags = [ :controller, :action ]
“`

# 前提知識
## Verbose Query Logsについて
Railsアプリケーションを開発していてふとログを見た時に、SQLログのすぐ下にソースコードのどの行で呼ばれたのかが出力されている (下記参照) のが地味に便利だったりする。
“`
Article Load (0.2ms) SELECT “articles”

元記事を表示

ShopifyAPI::Auth::Oauth::AuthQueryでwrong number of arguments (given 1, expected 0)が出る場合(Rails7 + Ruby3.0以上)

Shopifyの公式gemを使っていて発生したエラーに対する対処法。
(Rails7, Ruby3.0以上で多分発生)

filtered_params = request.parameters.symbolize_keys.slice(:code, :shop, :timestamp, :state, :host, :hmac)
keyword_params = Hash.ruby2_keywords_hash(filtered_params)
auth_query = ShopifyAPI::Auth::Oauth::AuthQuery.new(keyword_params)

auth_result = ShopifyAPI::Auth::Oauth.validate_auth_callback(
cookies: cookies.to_h,
auth_query: auth_query
)

キーワード引数の挙動の変更によるものと思います。

関連するワード:Shopify gem Oauth Rails7

元記事を表示

uninitialized constant ◯◯[定数名] (NameError)への対処法

# 概要

PF作成中にdockerでサーバーの起動を試みた際、
uninitialized constant OmniAuth (NameError)というエラーが表示。
つまづいたので記録として残します。

# 対処法

①以下項目を確認
・ファイル名とclass名が一致しているか?
・ファイルpathとmoduleの定義が一致しているか?
・Railsにファイルを読み込ませているか?
(引用元と詳細:https://qiita.com/yoshixj/items/17de45928f52264fd6a0)

②サーバー起動時に問題が発生した場合は、当該定数のGemがインストールされているか確認

以上です。

# ちなみに
私は②でした。
そもそもGemfileにomniauth-twitter(定数OmniAuthを使うためのGem)を記載していませんでした。

ミスは大体単純な所で発生しがち、気をつけます。

元記事を表示

開発をはじめて半年の私がデータの並び替えで使えるなぁと思ったもの

開発業務に携わって半年、
データの並び替えで使えるなぁと思ったものを2つ書き留めておきます。

開発環境
・Ruby
・Rails
・MySQL
・Mac

なお、この記事で「order」とは、「取得したレコードを特定のキーで並び替える」ことを指します。
[参考] https://railsdoc.com/page/model_order

#### 今回使うテーブル
Naoさん、Kenさん、Mikaさんのやることリストテーブルを仮定します。
contentはやることリストの内容、personは人、categoryは項目のカテゴリー、dateは日付を格納する想定です。

“`
+—-+————+——–+————–+————+
| id | content | person | category         | date |
+—-+————+——–+————–+————+
| 1 | 女子会 | Nao | frie

元記事を表示

【Rails】SNS機能で相互フォロー一覧を取得する

フォロー一覧、フォロワー一覧を実装する記事はよく見かけるのですが、相互フォロー一覧を取得する実装は見かけなかったので、今回記事にしました。

## 前提
基本的なフォロー・フォロワー機能がすでに実装してあることが前提となります。
具体的には以下のような実装を前提としています。

## モデル

“`ruby: user.rb
class User < ApplicationRecord has_many :relationships, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy, inverse_of: :follower has_many :reverse_of_relationships, class_name: 'Relationship',

元記事を表示

Turbo Rails Tutorial をやってみた! 0章(Mac、Ruby 3.2.0、Rails 7.0.4)

本記事は、?「Turbo Rails Tutorial」の学習を進めていく際の個人メモです!

https://www.hotrails.dev/turbo-rails

# 0章 [Turbo Rails tutorial introduction](https://www.hotrails.dev/turbo-rails/turbo-rails-tutorial-introduction)

この章では、環境構築をしていきます。ちなみに私は Mac ローカルで進めます。最新の ruby で進めたかったので ruby 3.2.0 をインストールしました。

“`terminal
$ brew update
$ brew upgrade ruby-build
$ rbenv install 3.2.0
“`

インストール時に下記と同じエラーが出ました。

https://github.com/rbenv/ruby-build/discussions/2118

ruby 3.2.0では、`libyaml`や`libffi`を別途インストールする必要があるそうです。

“`te

元記事を表示

バリデーションを始めて扱う

# バリデーション(検証)
Active Recordを使って、モデルがデータベースに“`書き込まれる前にモデルの状態をバリデーション(検証: validation)“`できます。Active Recordにはモデルチェック用のさまざまなメソッドが用意されており、属性が空でないかどうか、属性が一意かどうか、既にデータベースにないかどうか、特定のフォーマットに沿っているかどうか、多岐にわたったバリデーションが行えます。

バリデーションは、“`データベースを永続化するうえで極めて重要“`です。そのため、save、updateメソッドは、バリデーションに失敗するとfalseを返します。このとき実際のデータベース操作は行われません。上のメソッドにはそれぞれ“`破壊的なバージョン (save!、update!) があり、こちらは検証に失敗した場合にさらに厳しい対応“`、つまりActiveRecord::RecordInvalid例外を発生します。以下はバリデーションの簡単な例です。

“`rb
class User < ApplicationRecord validates

元記事を表示

【Rails】エラー Mysql2::Error: Table ‘〇〇_development.〇〇’ doesn’t exist: 

# 概要
アプリ作成時、コントローラ、モデルを一気に作成し、その後
“`$ rails db:migrate“` コマンド実行でタイトルのエラー。
解決方法をまとめます。

# 結果
“`rails db:migrate:status“` でdown状態を確認後、
マイグレーションファイルの日時部分を入れ替え、
“`$ rails db:migrate “`で解決。

![スクリーンショット 2023-01-03 16.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2235743/b5c32f8d-ec10-0936-ded1-d90ae7ebb106.png)

青丸の部分を入れ替えます。

# 原因
外部キー、モデル作成($rails g コマンド)の実行順番が原因でした。

以下、画像のcommunity_topic、article、community_topic_tagテーブルで解説します。
![スクリーンショット 2023-01-03 16.42.12.png](ht

元記事を表示

AWS内のDBを dbeaver に表示させる

## 概要

AWS(EC2 ,RDS CLOUD9) + Ruby on Railsでプロジェクト作成した。
AWS内で使用しているDB(Mysql)をWindows(ローカル環境)にインストールした
Dbeaver上でRails プロジェクト(本番環境)のDB(Mysql)を表示させる例を示す

## 前提条件

### 1.開発環境

EC2-インスタンス使用 (Amazon Linux)
-インスタンスid: i-〇〇〇〇〇…
-パブリック IPv4 アドレス:〇〇.〇〇〇.〇〇.〇〇
-Elastic IP: 上記に同じ

統合開発環境 AWS cloud9を使用
DB: sqlite3 (Railsでの標準DB)

### 2.本番環境

EC2-インスタンス使用 (Amazon Linux)
-インスタンスid: i-△△△△…
-EC2ユーザー名: ec2-user(デフォルトのまま :変更可)
-パブリック IPv4 アドレス:△△.△△△.△△.△△
-Elastic IP: 上記に同じ

DB: mysql 使用 (AWS R

元記事を表示

OTHERカテゴリの最新記事