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

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

Rails がオワコンwww

# はじめに
※ この文章はベータ版です。

Yahoo!知恵袋にあった間違いだらけのベストアンサーがあまりにも…だった
ので書いています。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10236599945

#このベストアンサーの問題点

著者が、よく知りもしない情報について、きちんと調べもせず、以前、聞き齧ったorどこかで
読んだような気がする、うろ覚えの情報をベースに回答しているようにしか見えない。

自分がうろ覚えの情報で回答することで、ネット上に誤情報をばら撒く可能性を考えていない
時点で、自分はこの著者が技術屋or技術屋を目指す人間ならアウトと評価します。

(この著者、「はず」「と思う」を多用することで、うろ覚えの情報で回答していますよアピールを
している気が、、、うろ覚えの情報で回答していることに何ら問題を感じていないようにみえます、
自分のうろ覚えの情報が間違っていた時のための予防線を張っているようにも。。。

「はず」「と思う」が多用されていても、質問者や読者が正しい情報と誤認識する可能性

元記事を表示

M1のmacに変えたらbundle installできなくなった件

先日、M1のmacbook proが届いて「さぁこれでairにイライラする生活ともおさらばだ!」とウキウキで環境構築していたらbundle installの段階で謎のerrorが出て余計にイライラすることになりました。

「新年早々…」と思いつつ色々調べた結果、なんと解決できたのでメモ程度に共有させていただきます。
#エラーについて
※すぐにエラー内容が開けなかったため概要だけにさせてください。覚えていたら追記します。

エラーで詰まるまで以下の手順を踏みました。
・githubからrailsプロジェクトをローカルにclone
・bundle install
そして、エラーを起こしたgemは私が確認した限りでは以下のものでした。

– ffi
– sassc

#解決方法
私の環境では以下の手順で解決しました。

Finder>アプリケーション>ターミナル(右クリック)>情報を見る>「Rosettaを使用して開く」にチェック

#まとめ
これは他の調べものをしていた際にたまたま見つけた解決方法でした。
一応、以下に本件に関連のありそうなappleのサポートページを

元記事を表示

【Rails】フォームの追加・削除(cocoon)

RailsでWebアプリケーションを作成するとき、入力フォームの追加を行いたかったので、以下に手順をまとめてみました。
「cocoon」というgemを使用すると、簡単に作成可能ですので、今回はそちらの方法で進めていきます。

#ゴールのイメージ
ますは、今回のゴールのイメージを見てみましょう。

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

#アジェンダ
1. テーブル設計
2. cocoon導入
3. モデル作成
4. コントローラー作成
5. ビュー作成

#テーブル設計
「Recipe」を親テーブルとし、その子テーブルとして「RecipeIngredient」と「HowToMake」を用意する。
ここでの親テーブルと子テーブルは1対多の関係。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

見えないけど存在する、devise:controllers

#はじめに
昨日、deviseのコントローラー内で用いられている`super`について言及しました。本日は少しだけその続きです。

昨日の投稿↓
[deviseコントローラーで出逢ったsuperについて調べてみた](https://qiita.com/TerToEer_sho/items/d1fa31c35962f6ca72f7)

##deviseの元のコントローラーはどこだ?

“`bash
% rails g devise:controller
“`
上のコマンドでは、deviseの様々なコントローラーの継承元を生成することができませんでした。
次のコマンドで生成可能です。

“`bash
% rails g devise:controllers [scope]
“`

まぁ、わざわざ元のdeviseのコントローラーを生成しなくても、オーバーライドでメソッドをいじることができるのですが…

##終わりに

コマンドで出てきたスコープという概念、よくわかってない…
ファイルを生成させなくても処理が動くということがとても不思議。

元記事を表示

マイグレーションファイルをupの状態で削除してしまった場合の解決法

# はじめに
railsでアプリを作っていたところ、不要なテーブルをマイグレートしてしまい、そのマイグレーションファイルを手入力で削除してしまった。
マイグレーションファイルをupの状態で消してしまうと

“`shell
Status Migration ID Migration Name
————————————————–
up 20210116053731 ********** NO FILE **********
up 20210118091408 Devise create users
“`
このように NO FILEという表示になってしまい、同じファイルを作ろうと思ったら、
「そのファイル名はすでにあるよ!」と怒られてしまい、途方に暮れたので、忘備録としてメモ。

# 結論
結論からいうと、別のマイグレーションファイルを作って、そこにファイルを消すような指示を出す、ということ。
今回だと、まず、dbディレクトリの配下にMigration IDを持ったファイルを作る

元記事を表示

ActiveRecordで特定のユーザーに関する全データを抽出する

## 特定のユーザーのデータを全て抽出したい!

サービス運営をしていると、極まれに特定のユーザーに関する全データを抽出したいことがある。
きっと、水平分割や、物理削除してしまったデータの復旧作業をする日がやってくる。

そんな面倒な作業をすることになったあなたのために、今回は特定ユーザーのデータ抽出・インポート方法を紹介する。

## ステップ1. 特定のユーザーに紐づく全てのデータを取得する

ActiveRecordを使っていれば、全てのテーブルはモデル層で関連づけられている。
そのため、Userクラスを起点に関連を辿れば、全ての必要なデータを引っ張ってくることができるはずである。

今回は、自前で書いた[active_record_depth_query.rb](https://gist.github.com/alpaca-tc/c4c539942240f414c8b4881e703c6b03)を使って、関連するレコードを一発で引っ張ってくる。
これを使うと、普段利用しているpreloadのように引数にArray/Hashを渡すことで、外部キーを探索してレコードを取得することが

元記事を表示

Heroku + CarrierWave + S3で画像投稿する方法

## 1. 作業の流れ

まず最初にS3のバケットを作成します。
最初に行う理由は後からローカルで開発しているRailsのアプリケーションにS3で決めた設定を
入力するからです。

S3のバケットの作り方ですが、参考資料をみて行うと問題なく進みます。

流れとしては、

1. まず`IAM`でユーザーを作成する。(ここで作成したアクセスキーIDとシークレットアクセスキーをcarrierwaveの設定で使用する。)
2. S3のバケットを作成する。(画像を保存する箱を作る)
3. gemの`fog-aws`を導入して設定ファイルなどを作成する。

の様に進んでいきます。

## 1. IAMユーザーの作成
まずAWSにアカウント登録すると`root`というめちゃくちゃ強い権限を持ったアカウントが作成される。
公式ではセキュリティ上の観点から`root`ユーザーを日常的に使用するのは推奨していないので`IAM`というサービスを使用して、別の権限のユーザーを日常使い様に作成します。

つまり、自分のAWSアカウントだとしてももう一人権限が小さいユーザーを作って管理するイメージです。※作

元記事を表示

パンくずリスト実装

## はじめに
利用しているユーザーがどのページにアクセスしているのかを一目で分かりやすくするために、パンくず機能を実装したので、載せておこうと思います。
今回は**gretel(リンクを設置したリストを表示するGem)**を用いて、実装しました。

## 1.Gemの導入・ファイル作成
**1.Gemfileに gretel を記述し、bundle installする。

“`ruby:Gemfile
gem ‘gretel’
“`

“`:ターミナル
% bundle install
“`

**2.パンくずリストの親子関係を記述するファイルを作成する。**

“`:ターミナル
% rails g gretel:install
“`
すると、config / breadcrumbs.rb が作成される。

## 2.パンくずリスト親子関係記述
**1 で作成した breadcrumbs.rb にコードを記述していく**

“`ruby:config/breadcrumbs.rb
crumb “viewで呼び出す時のページ名” do
link “リストの表示名”,

元記事を表示

enum で性別選択欄作ってみた

##新規投稿の時に性別を選択できるようにする

① enumを使用する時のデータ型は gender:integer にする

② enum gender: { man: 0, woman: 1 } をモデルに記述

③ view 作成

“`
<%= f.label :man %>
<%= f.radio_button :gender, :man %>
<%= f.label :woman %>
<%= f.radio_button :gender, :woman %>
“`

完成:blush:

なんだけど、これだと viewでは man か woman と出でしまうので、

私は
enum gender: { 男: 0, 女: 1 }

“`
<%= f.label :男 %>
<%= f.radio_button :gender, :男 %>
<%= f.label :女 %>
<%= f.radio_button :gender, :女 %>
“`

という風にしました。
いいのかわかんないけど:sweat:

英語を日本語にするgemを使った方か

元記事を表示

Kaminariを使用した非同期ページネーションの作り方

## この記事で説明する事

1. SJRを使用して非同期ページネーション実装する。
2. ページネーション自体はgemの`kaminari`を使用する。

## 簡単にアプリの作りを説明

インスタのクローンアプリで、ユーザーがいて、画像を投稿する事が出来る様な仕組みになっています。
`user has many posts`の形になっていて、今回はPostsに対してページネーションを付け様と思います。参考までにテーブル構成乗っけてます。

`usersテーブル`

“`ruby
create_table “users”, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8”, force: :cascade do |t|
t.string “email”, null: false
t.string “crypted_password”
t.string “salt”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null

元記事を表示

Rails6[APIモード]+ MySQL5.7 を Docker で環境構築

#はじめに
自分用です
Rails6 APIモード + MySQL5.7 を Docker(docker compose) で環境構築

Dockerそのものの導入は省略

#はじめに環境構築に必要なファイルを作成

* 以下のファイルを作成する
* アプリ用のトップレベルディレクトリ
* Dockerfile
* docker-compose.yml
* Gemfile
* Gemfile.lock

### アプリ用のトップレベルディレクトリ作成&移動

“`bash
$ cd

$ mkdir sample_app

$ cd sample_app
“`

### Dockerfile, docker-compose.yml, Gemfile, Gemfile.lock作成

“`bash
sample_app$ touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock}

sample_app$ ls
Dockerfile doc

元記事を表示

[Rails]検索機能を実装する

# はじめに

今回は検索フォームを実装です。

今回は記事のタイトルを検索すると指定したキーワードで記事を検索することができるというものを実装していきます。:running::dash:

# 実装

## routes

今回は「collection」を使用しますが
データを特定したい場合は「member」を使用します。
「member」を使用するとルーティングに「id」がつきます。

このように記述されています。↓

>またそのアクションを動かすときにparamsで「:id」を受け取りたい場合はmemberを使用し、
特にidを指定して特定のページにいく必要がない場合は、collectionを使用してアクションを追加する。

[Rails関連のことを調べてみた:routes.rbのcollectionとmemberについて詳しく学習](https://miofactor.com/2020/06/10/post-5545/#outline__3_0_5)

そしてその他参考にしたのがこちらです。

[Railsのルーティングを学ぼう②](https://diveint

元記事を表示

入社して約3ヶ月半、レビュー頂いた事を糧にするためのアウトプット記事

#なぜ書くのか
TECH::CAMPを卒業し、プロのエンジニアの方々のもとで、働き始め、3ヶ月半…
先輩方のリソースを、多く割いてしまったと痛感している事、No,1は、そう、**コードレビュー**。

多くのリソースを割いていただいているからこそ、必ず学びに + 誰かの役に立てたらと思い、この記事を書きます。

言語はRuby on Railsです。

#その1 命名はきっちりつける
まず基本中の基本ですが、意外に最初はできない変数やメソッド名などの命名についてです。
これは、変更を加える際や、他の人がコードを読んだときの可読性に大いに影響します。(僕は英語読めないので恩恵は受けにくいですが)

以下のコードを見てください。

“`ruby
a = “strawberry”
b = 100
“`

極端な例ですが、この変数をどこがで使用する際にこんな変数名だと、何が入ってるのか全く推測できず、コードを読む際のストレスが大きくなります。
当たり前ですが、明示的に変数の内容がわかる、命名を心がけるべきです。

“`ruby
product_name = “strawberry”

元記事を表示

サムネ付きで削除可能なファイルフォームの状態確認シート

いつも混乱するのでまとめておこうと思います。

# 前提

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64098/e98e939e-3d4f-93b8-8187-88fde399fa27.png)

“`html



元記事を表示

railsでテスト実行

>引用先
>[Railsチュートリアル](https://railstutorial.jp/)

#テストとは

言葉そのまんまで機能が正しく実装されたことを確認することです。
テストを書けばいざというときのセーフティネットにもなり、それ自体がアプリケーションのソースコードの「実行可能なドキュメント」にもなります。
テストが揃っていれば、バグを追うために余分な時間を使わずに済むため、正しく行えばむしろテストがないときよりも確実に開発速度がアップします。

#テストのメリット
1.機能停止に陥るような回帰バグを防止できる。
2.コードを安全にリファクタリング(改善)できる。
3.テストコードは、アプリケーションコードから見ればクライアントとして動作するので、アプリケーションの設計やシステムの他の部分とのインターフェイスを決めるときにも役に立つ。

#テストの実行
ターミナルにてrails generate controllerを実行した時点でテストファイルが作成されている。

“`:ターミナル
# 例
$ rails generate controller StaticPages ho

元記事を表示

[PostgreSQL] Railsアプリを削除するなら、先にデータベースを削除する!

##はじめに
学習中にサンプルアプリを作っては消すを繰り返していると、
ふと「フォルダ削除するだけでいいの?」と疑問に感じました。

調べてみると、、
**フォルダ**を削除する前に、**DB(データベース)**を削除しなければいけないらしいです!
以下、2通りの方法をメモしておきます。

– **DB削除 → アプリフォルダ削除**
– **アプリフォルダを削除してしまった後のDB削除方法**

##環境
– macOS Catalina
– Ruby 2.7.2
– Rails 6.0.3
– PostgreSQL 13.1

#① DB削除 → アプリフォルダ削除
該当アプリのフォルダ内で

“`
$ rails db:drop
“`
親ディレクトリに移動して

“`
$ rm -rf アプリ名
“`

必ず上記①の手順で削除するのが良さそうです。
ここからは、もしもアプリフォルダを先に削除してしまった場合の方法です。

#② アプリフォルダを削除してしまった後のDB削除方法
“`
$ psql -l (DB名を一覧表示
“`

“`
#実行結果(sam

元記事を表示

既存Rails6アプリのDocker環境への移行

#はじめに
ローカル環境でrailsを使用し開発を進めていましたが、今後のデプロイを考慮し、環境をDockerによるコンテナで管理することとしました。
初めてでかなり時間がかかってしまったため、備忘録として残します。
同様の環境構築が必要な方の参考になれば幸いです。

#環境構築にあたっての目標
* ローカルの環境をコンテナ化し、本番環境構築時に容易にしたい。
* Dockerのイメージは、効率化を考慮し、できるだけ軽量化したい。
* bundleやyarnのモジュールを永続化することにより、起動にかかる時間を減らしておきたい。
* DBはsqliteを使用していたので、ついでにMysqlにしたい。

#構築した環境
###コンテナの構成

* db
* web
* webpacker←webpack_dev_server実行用

###バージョン
* ruby 2.7.2
* Rails 6.0.3
* Mysql 8.0.22

##一覧
今回変更した箇所のみ記載しています。
ルートディレクトリはrailsアプリのルートディレクトリとしています。

“`
.
├── config

元記事を表示

CircleCi + Capistrano でEC2にデプロイ

# 記事を書いた理由
今回が初めての記事作成です。CircleCi+CapistranoでEC2へデプロイするための方法を他の記事を参考にデプロイできたので、記事作成の練習として内容をまとめてみました。

#前提条件
– CircleCiのGUIは執筆時(2021年1月19日)のもの。
– ローカルでCapistranoでEC2インスタンスへのデプロイは完了済み。
– すでにCircleCi上でRSpecやRuboCopなどは動く。(まだであれば[こちら](https://qiita.com/YK0214/items/bbed63ea7ca5367dae2f)が参考になりました。)

注意:この記事ではEC2インスタンスへのSSH接続がどのIPアドレスでも接続可能な場合の記事です。(対応次第追加します。)

#下準備(SSH鍵の形式変更)

最初にCircleCiへ登録するためのにSSH鍵の形式を変更します。
[こちら](https://qiita.com/tomoyuki_kt/items/7a4c714a674da6efa502)の記事を参考にして、過去にEC2インスタンスへアク

元記事を表示

【Rails】ローカル環境でS3の画像投稿ができるのに、Heroku上でS3に切り替わらない問題

# 現象
ローカル環境でうまくS3に画像を保管出来た!!
しかし、Heroku側にマージしてもなぜかHerokuのDB上で画像を保管している。。。
エラーも出ない。。
なぜだろうか。。。

# 原因
今思えば当たり前の話なのですが、、
原因は本番環境用(Heroku)のファイルにActiveStorageの設定をしていないというものでした。

|種類|環境|設定ファイル|
|:—|:—|:–|
|開発環境|ローカル環境|development.rb|
|本番環境|Heroku|production.rb(⇦こっちに設定入れてなかった)|
***** 同じミスをしないように手順を残しておきます *****

# ローカル環境での設定(※aws側の設定は割愛)

①S3を使用するために必要なGemfileを導入

“`Gemfile.
gem “aws-sdk-s3”, require: false
“`

②追記したら、ターミナルにて開発中のア

元記事を表示

gemのransackで複数カラムを検索対象にする方法

##始めに
僕自身複数カラムを検索対象にするのは難しいと思っていたのですが、思っていたより簡単にできたので是非参考にしてもらえたらなと思い、書くことにしました。

##前提
僕はPostモデルのtitleとdescriptionを検索対象にやっていきます。

“`ruby
class CreatePosts < ActiveRecord::Migration[5.2] def change create_table :posts do |t| t.string :title  ⬅️⬅️⬅️⬅️⬅️⬅️これ t.integer :recommended     t.text :description ⬅️⬅️⬅️⬅️これ t.references :user, foreign_key: true t.timestamps end add_index :posts, [:user_id, :created_at] end end ``` ##やり方 始めにviewの一部を変えていきます。 ti

元記事を表示

OTHERカテゴリの最新記事