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

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

【Rails/MySQL】bundle installでgem mysql2がインストールできない時の解決法

## 環境
macOS Monterey:12.3.1
Ruby:3.1.0
Ruby on Rails:6.1.5
Bundler:2.3.12
MySQL:8.0.28(Homebrew3.4.10でインストール)

## エラー時の状況
1. RailsでMySQLを使うために“rails new -d mysql“を実行
1. bundle installの所でエラーが発生(mysql2のインストールに失敗していた)

上記のエラーの解決法を紹介します。

## エラーログ
“`shell
kazunoko@macbook test % rails new -d mysql
省略
run bundle install
Fetching gem metadata from https://rubygems.org/………..
Resolving dependencies….
省略
Gem::Ext::BuildError: ERROR: Failed to build gem native extensio

元記事を表示

Render.com にRailsアプリをデプロイ / 設定でつまったところ紹介

## はじめに

 さくらVPSヘのデプロイは中止した。非常にややこしいことになってきたためだ。また別記事にまとめる。もっと簡単にデプロイする場所を探して、最近流行りつつあるRender.comを使った。

## Render.comとは

https://render.com/

 PaaSのひとつで、Herokuよりも価格が安く柔軟に対応できるらしい。Renderの公式サイトで以下のような挑戦的な記事があった。

https://render.com/render-vs-heroku-comparison

 どちらも無料でつかえるプランがあるし、速度については比較してみないと違いがよくわからない。

## 設定でつまったところ

 ちょー簡単にデプロイまでできるのだが、すこしつまったところがあった。Render.comでは「Build Script」というスクリプトを書いて、デプロイの際にそれが実行されるようにしている。

https://render.com/docs/deploy-rails#create-a-build-script

ただ、私の場合はなぜかそれが反映され

元記事を表示

【Rails】deviseのviewsをカスタマイズする方法

Rails6で`$ rails generate devise:views`をして得たデフォルトのviewsをカスタマイズしようとしたらうまくいかなかったです。

[deviseのgithub](https://github.com/heartcombo/devise#configuring-views)をみてみると下記の文が書いていました。

>If you have more than one Devise model in your application (such as User and Admin), you will notice that Devise uses the same views for all models. Fortunately, Devise offers an easy way to customize views. All you need to do is set `config.scoped_views = true` inside the `config/initializers/devise.rb` file.

和訳すると。

>一つ

元記事を表示

jQueryインストール

こんにちは
未経験から転職を目指すものです

今回はrailsアプリに
jQueryを入れて
画面に動きをつけていこうと
思います。

## 環境
* macOS Monterey 12.3.1
* Ruby 3.1.2
* Bundler 2.3.10
* Rails 6.1.4.7

# jQueryインストール
まずはjQueryをインストールしていきます。
rails5以前はjquery-railsというGemをインストールするのが
主流のようですが
webpacker管理するには
yarnコマンドを使用しないといけないので、
yarnを使用してjQueryをインストールしていきます。

“`
$yarn add jquery
yarn add v1.22.18
[1/4] 🔍 Resolving packages…
[2/4] 🚚 Fetching packages…
[3/4] 🔗 Linking dependencies…
[4/4] 🔨 Building fresh packages…
success S

元記事を表示

Railsのdeviseでパスワードリセット時にメールアドレス以外の値もチェック項目として使用する

# はじめに
こんにちは。
Rails書き始めて4ヶ月になりました。

今回はdeviseを使用したユーザ認証基盤において、パスワードリセット時にメールアドレス以外の値もチェック項目として追加してみました。

参考になれば幸いです:bow:

# 結論
以下では、emailとusernameの2つの値でチェックしています。

“`ruby:user.rb
class User < ApplicationRecord devise reset_password_keys: %i[email username] end ``` あとは、formでusernameもPOSTされるようにすればOKです:ok_hand: # 解説 パスワードリセット時のkeyは以下で`email`がデフォルトで設定されています。 https://github.com/heartcombo/devise/blob/main/test/rails_app/config/initializers/devise.rb#L135 こちらを上書きすることでkeyを増やすことができます。 上書きはconfig

元記事を表示

非同期時の送信ボタン制御について

# 記事の内容
非同期での送信ボタン制御を実装する中で色々と躓いたため、備忘録も兼ねて記録として投稿しました。

今回は、XMLHttpRequesを使用して JavaScript から非同期的にデータを送信する方法をご紹介いたします。

# 完成形

[![Image from Gyazo](https://i.gyazo.com/0b3d2fa3696586e4a03339fcda9dc771.gif)](https://gyazo.com/0b3d2fa3696586e4a03339fcda9dc771)

# 完成形のコード
modelオプションに設定している`@pdf`は、コントローラで定義しているインスタンス変数になります。
`gem`は`wicked_pdf`を使用しており、ここではPDFファイルを生成する処理を記述しております。

https://qiita.com/inoue9951/items/4498e5d130702d884352

※ コントローラ、フォーム部分は一部割愛しております。

“`ruby:order_page.html.erb
<%= form

元記事を表示

accepts_nested_attributes_forで子要素を保存する時にfirst使ってはいけない

accepts_nested_attributes_forにおいて、最初のデータの保存がうまくいかないケースがあった。

## 前提

“`ruby
# app/models/estimate.rb

class Estimate < ActiveRecord::Base has_many :estimate_items accepts_nested_attributes_for :estimate_items end ``` ## ❌ ダメなコード ```ruby # rails console $> est = Estimate.find(1)
$> puts est.estimate_items.first.name
=> “test1”
$> est.estimate_items.first.name = “hoge”
$> est.save!
$> puts est.estimate_items.first.name
=> “test1” # 「hoge」が保存されてない!
“`

## 🙆‍♂️ OKなコード
“`ruby
# rails consol

元記事を表示

経験ゼロの新人が1ヶ月でウェブアプリを作らされるヤバい研修 part 1

ウチ(ダイレクト出版)のエンジニア新人研修(今回は俺を含めて新人2人)で、知識ゼロ、経験ゼロから1ヶ月でこんなものを作った↓

![スクリーンショット 2022-04-18 9.28.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496677/531e0c4a-0f2e-4d3e-d384-059f79cb431b.png)

アプリ名は「TeaTime」。社員間のコミュニケーション不足を解消するために、月に一度いい感じのお茶会をセッティングして、社員同士でお茶してもらうというもの。ダイレクト出版ではslackを使って業務のやりとりをしているので、slackと連携してログインして、botから自動でお茶会の招待状やリマインドが届くようになっている。

この研修は、プログラミング初心者が実際に使うアプリを開発することで、RailsやMySQL、Gitなど業務に必要な知識と経験を爆速で得て、本流の開発(自社開発のアプリやシステム)にスムーズに携わることができるようにすることを目的としている。

ポイ

元記事を表示

MySQLの外部キー制約(ON DELETE)を指定しているならRailsのdependentは未指定でOK!

今までMySQLの外部キー制約(ON DELETE)とRailsのアソシエーションに設定する`dependent`は、同じ挙動のものを設定しておけばいいだろうと思って特に意識せずに設定していましたが、本当にそうなのか気になったので動作を検証してみました。

# 前提条件

## MySQLの外部キー制約

今回の検証では、外部キー制約のDELETE時の挙動を検証します。
検証するのは下記の3つです。

* RESTRICT
* CASCADE
* SET NULL

外部キー制約についての詳細はMySQLのドキュメントをご覧ください。

https://dev.mysql.com/doc/refman/5.6/ja/create-table-foreign-keys.html

## dependent

dependentはhas_one/has_many/belongs_toに設定できますが、今回の検証ではhas_manyを使います。

検証するのはMySQLの外部キー制約に対応する下記の3つです。
restrict_with_errorはrestrict_with_excepti

元記事を表示

【Ruby on Rails】railsでスタディープラスっぽいもの作ろうとしてみた(グラフ表示)

# はじめに
自分のスキルアップのために人気アプリ、スタディープラスのトレースをしていてその過程でちょっと悩んだところがあったので備忘録として記事として残します。もし、もっとスマートな書き方があったらご教示ください。

# 実装
実装に際して前提として①基本となる投稿機能(Tweetモデル) ②deviseを用いたユーザー機能 の2つが実装されているという前提で作成を進めていきます。
また、tweetsテーブルにstrig型でtagという名前のカラムを事前に追加しておくようにお願いします。

## カテゴリの選択と追加
### 1.モデルの作成とアソシエーション
勉強した科目などのカテゴリを追加・保存するためのテーブル(tagsテーブル)の作成を行います。
コマンドプロンプトで以下のコマンドを実行してください
“`
rails g model Tag name:string
“`

“`
rails db:migrate
“`

また、アソシエーションの設定もしておきましょう!

“`ruby:tweet.rb
has_many :tags
“`

“`ruby:

元記事を表示

Rails(API mode) で、passwordを持ったUserの作成

## 手順
“`sh
rails new pwsample -d postgresql –api
cd pwsampple
rails db:create
“`

`./Gemfile`のbcryptが含まれる行のコメントを外す。
“`
gem “bcrypt”, “~> 3.1.7”
“`

Userモデルとコントローラーを作成。
passwordは、`password_digest`というカラム名にする。
“`sh
rails generate model user name:string email:string password_digest:string
rails generate controller users
rails db:migrate
“`

`./config/routes.rb`に`resources :users`を追加
“`ruby:./config/routes.rb
Rails.application.routes.draw do
resources :users
end
“`

`./app/models/user.rb`に

元記事を表示

destroy action実行時にcouldn’t Item find with ‘id’=1のエラー表示

# はじめに
 実装中のフリマアプリにて、「ログイン状態の場合にのみ、自身が出品した商品情報を削除できること」という実装条件に合わせて記述したのち、商品詳細ページから削除ボタンをクリックすると、下記のエラーが発生しました。
結論、エラー内容とは関係なく、destroyアクション処理後の挙動を記述していないことが原因のようでした。
![スクリーンショット 2022-05-05 18.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655610/573f5dda-8eaf-f86c-a72c-578109c6f946.png)
 上記エラー文を確認すると、 「ItemsControllerに記載しているdestoroy actionを実行したがid1が見当たらない」といった指摘がされているようでした。

# 仮説・検証

### 仮説1
 エラー文の通り、idが受け渡されていない事が原因でエラーが発生しているのではという仮説のうえ、MVCの流れに沿って下記の検証作業を行いました。

### 検証

元記事を表示

【ポートフォリオ開発】RubyとRailsのバージョン選定で参考にした情報

本稿では、ポートフォリオの作成で使うRubyとRailsのバージョン選びの時に参考にした情報を紹介します。

## Ruby

### リリース情報
– [Ruby公式ページ_ダウンロード](https://www.ruby-lang.org/ja/downloads/)

### バージョニングルール
– [Ruby 2.1.0 以降のセマンティックバージョニングについて](https://www.ruby-lang.org/ja/news/2013/12/21/ruby-version-policy-changes-with-2-1-0/)

## Ruby on Rails

### リリース情報
– [Rails公式ページ](https://rubyonrails.org/)
– [RubyGems railsの全バージョン履歴](https://rubygems.org/gems/rails/versions)
– [rails公式レポジトリ](https://github.com/rails/rails/releases/)

### バージョニングルール
– [Ruby

元記事を表示

【Rails】Sorcery✖️Twitter認証で詰まった話

# はじめに
こんにちは、たけむーです。

今回は、ポートフォリを開発していてtwitterログインの実装で詰まったのでメモとして残しておきます。

アプリ側の設定はSorceryの[wiki](https://github.com/Sorcery/sorcery/wiki/External)と[この記事](https://blog.aiandrox.com/posts/tech/2020/03/29/)を参考にしました。
Twitter Developerの設定は[この記事](https://blog.palettecms.jp/article/20103)を参考にしました。

この記事では設定の説明は省略させもらいます。

# 結論
先に結論を言うと、[Twitter Developer](https://developer.twitter.com/en/portal/dashboard)でアクセス権限を**Essential**から**Elevated**にしましょうという話です。

# 発生したエラー
上記の記事等を参考に設定を行い、実際に認証できるか動かしてみました。
すると

元記事を表示

【Rails/MySQL】RailsでMySQLを使う方法

## はじめに
Railsではデフォルトのデータベースにsqlite3を使用しています。
今回はRailsアプリケーションのデータベースでMySQLを使用する方法を紹介します。

なお、本稿はRailsの環境構築を終えた段階からの手順になるため、まだの方は以下の記事を参考にしてください。

https://qiita.com/kazunoko1606/items/334ae634af8b30e84db6

## 環境
– macOS Monterey:12.3.1
– Ruby:3.1.0
– Bundler:2.3.12
– Ruby on Rails:6.1.5
– MySQL:8.0.28

## 手順

以下の手順で進めていきます。
1. MySQLのインストールとセキュリティ設定
1. MySQLのユーザー作成
1. Railsアプリケーションの作成
1. dotenv-railsの導入
1. データベースの作成

### 1.MySQLのインストールとセキュリティ設定
まず初めに、MySQLのインストールとセキュリティの設定を行います。

https://qiita.com

元記事を表示

【Rails/MySQL】dotenv-railsを使ってデータベースの認証情報を環境変数で管理する

RailsにMySQLを導入する際に、パスワードをdatabase.ymlに直接書くのはいかがなものかと思い、他の方法を調べた結果、dotenv-railsを使って認証情報を環境変数で管理できることがわかりました。

今回は作成済みのRailsアプリケーションにdotenv-railsを導入する手順を紹介します。

## 環境
macOS Monterey:12.3.1
Ruby:3.1.0
Ruby on Rails:6.1.5
dotenv-rails:2.7.6
MySQL:8.0.28

## dotenv-railsとは
– 認証情報などを環境変数で管理するためのgem
– 起動時にプロジェクトのルートディレクトリにある.envファイルを読み込み、ENVに設定する
– [dotenv-rails公式レポジトリ](https://github.com/bkeepers/dotenv)

## 手順

以下の手順で進めていきます。
1. dotenv-railsのインストール
1. database.ymlファイルの修正
1. .envファイルの作成
1. .gitignoreフ

元記事を表示

Ruby on Railsをgit cloneする

この記事は学習した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。
## git cloneとは
そもそも[git clone]とは?
#### 『Gitに存在するリモートのリポジトリをローカルの環境にコピーする』
学習し初めの頃はなかなか[git clone]をすることがなかったですがAWSで自分のアカウントを作成して環境の構築する際に始めて出てきました。
## git cloneの流れ①〜⑥
##### ① GIt hubを開きローカルにコピーしたいリポジトリを選択しリポジトリの画面へ
##### ② 緑色の[Code]のボタンを押し「git@github.com:[ユーザー名]/[リポジトリ名].git」のSHH keyをコピーする。
##### ③ ローカルの環境を開き以下のコマンドを入力
“`
ec2-user:~/environment $ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
“`
##### ④ 以下のコマンドでローカ

元記事を表示

【Rails】モデル名.human_attribute_name(:カラム名) 使い方

# はじめに
Railsの参考書を読んでいた時に、human_attribute_nameについて、
理解していなかった為、簡単にまとめます。

# モデル名.human_attribute_name(:カラム名)とは?
ActiveRecord::Base のクラスメソッドで内部的にI18nモジュールを利用してくれるというものです。
まず、config/locales/ja.ymlに参照元を書いていきます。

# config/locales/ja.ymlに定義
“`config/locales/ja.yml
ja:
activerecord:
errors:
messages:
record_invalid: ‘バリデーションに失敗しました: %{errors}’
restrict_dependent_destroy:
has_one: “%{record}が存在しているので削除できません”
has_many: “%{record}が存在しているので削除できません”
model

元記事を表示

KeyError: Factory not registered:の解決方法

# この記事で伝えたいこと

`KeyError: Factory not registered: …`というFactoryBotのエラーが出てこの記事にたどり着いた方へ。
あなたが作っているアプリはRailsアプリではありませんか?
もしそうなら、Gemfileに以下のように書いていませんか?

“`ruby:Gemfile
# これは間違い!
gem ‘factory_bot’
“`

Railsアプリの場合、以下のように **factory_bot_rails** を使うようにすることで `KeyError: Factory not registered` が起こらなくなると思いますので、お試しください。

“`diff_ruby:Gemfile
– gem ‘factory_bot’
+ gem ‘factory_bot_rails’
“`

# もっとくわしく

## この記事を書いた経緯

RailsにFactoryBotを入れる場合、本来は **factory_bot_rails** を使うべきですが、**factory_bot** を使ってしまったことで `

元記事を表示

【誰でも簡単】RailsアプリをRender.comでデプロイする手順まとめ

# はじめに
こんにちは

普段herokuを使うことが多いのですが、この前のGithubアクセストークン流出問題もあり、herokuに代わるサービスとして気になっていたRender.comを触ってみたので、簡単な手順やポイントなどを書き留めておこうと思います📝

Render.comを使ってみたい人の一助になれば嬉しいです

↓トークン流出問題の記事

https://gigazine.net/news/20220418-github-heroku-travis-ci-npm-oauth/

(ターゲットは初心者〜中級者向けを意識しています)

# 取り上げる内容(取り上げない内容)

本記事で説明するのは以下についてです。
* Render.comでのRailsアプリのデプロイ方法
* 上記にあたり少し注意する点など(初見では気づきにくい部分)

以下については説明しません(後ほど別記事などで追加するかもしれません)
* Railsアプリの作り方
* Rails以外のアプリでのデプロイ方法
* Dockerを使ったデプロイ方法
* redisの設定
* cronの設定

元記事を表示

OTHERカテゴリの最新記事