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

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

経験ゼロの新人が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
“`

`.pwsample/app/models/u

元記事を表示

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の設定

元記事を表示

Rails API + React による開発ではまった点

# 初めに
rails APIとReactを用いた開発ではまった点に関するメモです。rails APIをHeroku、Reactをfirebaseにデプロイしたのですが、開発段階では起きなかったエラーも発生したのでそれらについてもまとめています。あくまでエラーに関する記事なのでユーザー認証やメール送信の実装などには深く触れません。

プロジェクトの構成は以下のようになっています。
“`
プロジェクトフォルダ
├ backend
└ frontend
“`

rails 側はAPIモードを指定してrails new、React側はcreate-react-appで作成しました。
“`:backend
# こちらでも問題ありませんが、
rails new . –api

# 以下のようにDBをpostgresqlに指定したほうがHerokuにデプロイする際にごちゃごちゃせずに済みます。
rails new . –api -d postgresql
“`

“`:frontend
npx create-react-app .
“`

# 1. CORS(Cross

元記事を表示

Ruby初心者がGitHub上でよくやりがちな誤爆メンションとその解決策

## はじめに:誤爆メンションって何?
Rubyでは`@`で始まる変数がインスタンス変数になります。
これはRuby on Railsなどでも当然同じルールです。

“`ruby
# @で始まる変数はインスタンス変数
@foo = 1

# 何も付かない変数はローカル変数
foo = 1
“`

一方、TwitterやGitHub、そしてこのQiitaなど、昨今のSNSでは`@`がユーザーへのメンションとしても使われています。
たとえば、以下の画像に見える`@jnchito`は、jnchitoというTwitterユーザーに対するメンションです。

![Screen Shot 2022-05-04 at 15.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/bff65b1b-67bb-c4f4-4427-2e349e2b1428.png)

この2点はわざわざ僕が説明しなくても「そんなこたぁ前からわかっとるわい!」と思われそうな話なのですが、TwitterやGitHubで何も考え

元記事を表示

ユーザーごとの学習時間の合計

# はじめに
この記事は筆者がスタディープラスのトレースをする際に、ユーザーの学習時間のランキングを表示するために書いたコードの備忘録になります。
# 実装
deviseの導入と基本となる投稿機能(記事内ではtweets)が完成している前提で進めます。

“`ruby:users_controller
#以下を追記
def index
user = User.all
@arr = []
user.each do |t|
t.sum_time = t.tweets.sum(:time)
@arr.push(t)
end
end
“`
pushメソッドは配列(@arr)の末尾に要素を一つ追加してくれるメソッドです

“`ruby:app/views/users/index.html.erb

Users#index

<% @arr.each do |u| %>
<%= u.email %>
<%= u.sum_time %>

元記事を表示

【Rails】Deviseのサインアップページが編集できない、反映されない

# 起きている問題

“`app/views/users/registrations/new.html.erb“`などを編集してるにも関わらず、変更が反映されない。
エラーも表示されない

# 解決方法
`config/initializers/devise.rb`の
“`
# config.scoped_views = false
“`

“`
config.scoped_views = true
“`
に変更、#も取る

見つからない場合はctrl(もしくはcommand) + Fでファイル検索できる。

変更後サーバーを再起動させる

以上

元記事を表示

Rails+ReactのDocker環境(TechpitさんのUberEats風SPAアプリ)

# 概要
Railsチュートリアルを完走し終えまして、
次何しようかなと考えていたところに「完走者向け発展教材(Techpit)」を見つけたので、教材に挑戦しています。

「RailsとReactでUberEats風SPAアプリケーションをつくってみよう!」
https://www.techpit.jp/courses/138

ただ、PC上に展開したくなくてDocker上で動作するようにしました。

# ソースコード
Dockerfile
“`Dockerfile
FROM ruby:2.7.2
RUN apt-get update -qq && apt-get install -y build-essential nodejs postgresql-client libpq-dev

RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – &&

元記事を表示

Rails + ransackでセレクトボックスからscopeを選択して検索条件にする方法

## はじめに

ransackでよくある`name_cont`や`articles_title_start`のような条件では表現できず、scopeを使わないと検索できないケースで、なおかつセレクトボックスから任意の検索条件を選択できるようにする検索フォームを作ってみました。

## アプリの仕様

テスト管理アプリケーションです。生徒を表すStudentモデルと、試験の結果を格納するExamモデルがあります。

“`ruby
class Student < ApplicationRecord has_many :exams, dependent: :destroy end ``` ```ruby class Exam < ApplicationRecord belongs_to :student end ``` DBには以下のようにデータが格納されているとします。 **studentsテーブル** | id | name | |----|-------| | 1 | Alice | | 2 | Bob | | 3 | Carol | **exam

元記事を表示

heroku本番環境でerror Command “webpack” not found.やActionView::Template::Error(Webpacker can’t find)を解決

※これはメモ的なものなのでクオリティは担保できませんのであらかじめご理解いただきたく存じます。
https://teratail.com/questions/eelxqk0ads5nv3
テラテイルのほうでも質問をしていて、自力で解決できたのでどうやって解決できたかを自分なりにまとめてみました。
dockerのnodeのバージョンを確認したほうが良い。とのアドバイスは@NaokiM03さんにしていただき、バグの発生環境の切り分けに大いに役立たせていただきました。本当にありがとうございました。

# 前提

docker開発環境でRailsとVueを用いた簡易的なアプリを
herokuにコンテナデプロイしています。

を参考にコンテナデプロイをしてみました。

https://devcenter.heroku.com/ja/articles/build-docker-images-heroku-yml

自分の場合はさらに、

アプリケーションのルートディレクトリに heroku.yml​ ファイル

元記事を表示

OTHERカテゴリの最新記事