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

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

stylesheet_link_tagとstylesheet_pack_tagの違い(自分用)

https://zenn.dev/ryouzi/articles/da8a77accc221e

元記事を表示

minitestでエラー`block (2 levels) in

# はじめに
minitestでテストを書いていると、
下記の部分でfailになった。
“`言語名:ターミナル
FAIL[“test_index_as_admin_including_pagination_and_delete_links”, #, 2.8298179999983404]
test_index_as_admin_including_pagination_and_delete_links#UsersIndexTest (2.83s)
Expected at least 1 element matching “a[href=”/users/14035331″]”, found 0..
Expected 0 to be >= 1.
test/integration/users_index_test.rb:19:in `block (2 levels) in

元記事を表示

[React/Rails] WebSocket connection to ‘ws://localhost:3000/ws’ failed が発生してレスポンスが受け取れない

## 動作環境
MacOS M1 BigSur 11.6
Docker “20.10.8”
node “14.17.5”
yarn “1.22.5”
react-scripts “5.0.1”
axios “^0.27.2”
Rails “6.1.6” APIモード

## 結論
Reactのルートディレクトリ直下に.envファイルを作成し、下記の記述をする
“`/.env
WDS_SOCKET_PORT=0
“`

## エラー内容
React/TypeScriptで作成したアプリケーションからRailsのAPIへリクエストを送信したところ下記エラーが発生した。
![スクリーンショット 2022-06-20 22.41.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685944/4c8c1ab2-2ef2-3cf2-533c-a931cb35fcd3.png)

“`
WebSocket connection to ‘ws://localhost:3000/ws’ failed
“`

元記事を表示

【rails】プルタブ式の生年月日フォームを簡単に追加するDay6

今日もお疲れ様です。今日はhtmlのパーツの配置とdeviseでユーザー登録機能を導入していました。今回は下写真のようにプルタブ式の”生年月日”を追加で実装するrailのヘルパーメソッド「f.date_select」について、簡易的にまとめます。
![スクリーンショット 2022-06-20 22.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707093/e83161b2-b88a-7888-1366-9f42715b08a7.png)

# 生年月日をテーブルに登録できるようにする
顧客に入力してもらった生年月日をデータベースに登録する場合はお読みください。やり方は結論から言って、マイグレートファイルにカラムを追記し、生年月日データを受けと取れるようにする必要があります。記述方法は以下
“`ruby:〇〇〇〇〇〇〇〇_create_テーブル名.rb
t.date :birthday
“`
注意点ですが、記述する前に「rails db:migrate:status」でマイグレート

元記事を表示

はじめての環境構築 ~WindowsでRailsの開発環境を構築する~

**はじめての環境構築 ~WindowsでRailsの開発環境を構築する~**

# 1. はじめに

## 1-1. 対象読者

– Windows 10 / Windows 11 のユーザー
– 開発環境の構築に自信がない
– 構築中にエラーが出たが、対処方法が分からない

## 1-2. 実行環境

– OS: Windows 11 Home 21H2 64bit
– PC: LAVIE HZ750/L
– CPU: Intel Core i7-8550U
– メモリ: 8GB

## 1-3. Windowsに構築しようと思ったきっかけ

Railsを学習するためにMacBookを購入したのですが、開発効率が思ったより向上しなかったので、慣れ親しんだWindowsに戻すことにしました。

MacはM1チップだったこととシェルがZSHだったことのどちらかが原因でgemのインストールに苦労しました。また、ExcelやWinMerge、サクラエディタ、psqleditといったツールを開発の補助で使用していますが、Macには同等のツールが存在しません。

## 1-4. 注意点

元記事を表示

【Rails】【MySQL】Mysql2::Error: Specified key was too long; max key length is 767 bytes

昨日分の記事を投稿し忘れていました。こんばんは。今日はテックキャンプ現役受講生のアプリ開発Day4です。トップページのレイアウト作成とdevise導入をしていました。そこで遭遇したエラーについて概要と解決方法について紹介します。

# Caused by:Mysql2::Error: Specified key was too long; max key length is 767 bytes
railsでdeviseのマイグレートファイルをマイグレートしようとしたときに出てきたエラーです。エラー内容を要約すると、「mysql2では767バイトのデータしか登録できないのに、deviseで作ろうとしたキー(カラムのこと?)は許容量をオーバーしてます。」というものです。一応エラーが出てきた経緯を記述した上で、解決方法を最後に記入しています。
# エラーが出るまでの経緯

①まずはアプリケーションとDBを準備します。
“`ruby:ターミナル
rails _6.0.0_ new sample -d mysql
rails db:create
“`
②次にdevise導入のために、Ge

元記事を表示

【Rails】マイグレーションのロールバックを確認すべし

# 初めに

マイグレーションファイルを追加した後、ロールバックできるか確認していますか。

## 環境

– Rails 6.1.4
– Ruby 2.7.4

# マイグレーションのロールバック

開発を進める中でデータベースのバージョンを上げることがありますが、正しく動作しないマイグレーションがチームで共有されると、エラーが解消するまで開発が止まってしまいます。

マイグレーションを追加するときは、バージョンを上げるだけでなく、下げることができるようにするのが通常であると考えたほうがいい。

## ロールバックできるかを確認する

エラーを防ぐために、バージョンを上げた後にロールバックし、もう一度バージョンを上げて確認をします。

1. まずは`rails db:migrate`でバージョンを上げてエラーが起きるかを確認する。

2. その次に、`rails db:migrate:redo`を行い、バージョンを下げて後にもう一度上げてエラーが起きないか確認する。

`rails db:migrate:redo`はマイグレーションのバージョンを下げた後に上げて元に戻します。

#

元記事を表示

rails renderの使い方(自分用)

renderを同じメソッドで2回使うときは and return またはreturn でメソッドから脱出させる必要があるみたい

https://pikawaka.com/rails/render

元記事を表示

Create Factory Bot instances out of rspec

If you want an instance created by Factory Bot, say in a rails console, follow this.

“`rb
$ bundle exec rails

> class Object
> include FactoryBot::Syntax::Methods
> end

> create(:user)
“`

元記事を表示

rails db:seedできなくなった

# rails db:seed できなくなった
## rails db:seed とは
Railsには、初期データを追加するためのシード機能が備わっており、「seed.rb」ファイルにデータを記述していきます。
例えば、
“`
Customer.create!(
email: “aaa@amail.com”,
password: “a12345”,
nickname: “れいこ”,
profile: “令和生まれの道子です。”,
)
“`
こんな感じでCustomersテーブルのそれぞれのカラムにデータを保存(create!)します。
このような記述の集まりが、「seed.rb」ファイルで、それを実行するのが、“`rails db:seed“`というわけです。
## エラー
rails db:seedをすると、既にemailがデータベースにあるようで、バリデーションエラーとなりました。
## TRY
1. x
“`
rails db:reset
rails db:seed
“`
2. x
“`
rails db:drop
rails db:migrate
rail

元記事を表示

エンジニアならこの問題、解けるよなぁ?!

どうも。タイトルほどの威勢はありません。
ということでTwitterみてたら我らがしみけんさんがこんなツイートしてた。
mojikyo45_640-2.gif

簡単にいうと、コインを100回投げて、裏表を10*10マスに文章の横書きの順番で記録してこい。ただし捏造しても良い。というものだ。
で?って話なんだけどこの課題を出した教授は捏造されたものを簡単に見分けたのだとか。
じゃあどうやって見分けたんだ?ってのが面白そうだったから考えてみて、そしてエンジニアらしくプログラムを組んでみた。
読み進める前に、ちょっと考えてみて欲しい。
##

元記事を表示

過去問共有サービス Univer の開発を行いました。

![スクリーンショット 2022-06-19 22.57.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/97698656-b2fb-4cfa-b054-c09ded52b39f.png)

過去問共有サービスUniverです。企画からデザイン、デザインに至るまで一気通貫して一人で行いました。

https://universitycommunity.herokuapp.com/

[開発背景]
開発の理由は二つあります。
一つ目の理由は、コロナの影響で縦と横のつながりが薄くなり、過去問が手に入りづらくなったという学生の問題を解決するためです。
また私自身の周りにそういった悩みを抱えている学生の方が多くいたことから、ユーザー数が期待できるため、多くの方のフィードバックを通じてより質の高いサービス開発に取り組めると考えたからです。

[実装機能]
投稿機能、画像投稿機能、ログイン・ログアウト機能、フォロー機能、いいね機能、コメント機能、お気に入り登録機能、検索機能など、SNSに利用

元記事を表示

Your Ruby version is 2.7.3, but your Gemfile specified 2.7.5 と表示されるエラーの解決

はじめに

ロリポップマネージドクラウドを使い自作アプリをデプロイしようと思い

`git push lolipop master`

を行うと

`remote: Your Ruby version is 2.7.3, but your Gemfile specified 2.7.5`

というエラーが起きた。

エラーについて

エラー内容を直訳すると

`あなたのRubyは2.7.3なのに、Gemfileには2.7.5となっている。`

という事だがGemfileを確認すると2.7.3になっており、他にもGemfile.lock、.ruby-versionを確認しても2.7.3だった。

他サイトなどを参考にし、

`bundle install` や `rbenv local 2.7.3`

などを行っても解決しなかった。

エラー解決

GemfileやRubyのバージョンを変更した際に、gitにコミットしていないことが原因であった。

そこで

`git add .`

`git commit -m “”

元記事を表示

rails Bootsnapを無効化する

# 起きている問題
rails sすると
bootsnapでエラーが出る
`gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require`

# エラー原因のBootsnapを無効化する

以下の二つの行を無効化
“`ruby:Gemfile
# gem ‘bootsnap’, ‘>= 1.4.4’, require: false
“`

“`ruby:boot.rb
# require “bootsnap/setup” # Speed up boot time by caching expensive operations.
“`

その後

“`
$ bundle install
“`
を実行

以上で解決
“`
$ rails s
“`

元記事を表示

特定の条件下で attribute のデフォルト値が書き変わってしまう問題と、その対策として Rails/AttributeDefaultBlockValue を少し紹介

ActiveRecord や ActiveModel::Attributes の attribute メソッドによって属性を定義する際に、第二引数の cast_type を指定せず、かつデフォルト値を指定している場合に、この属性に対して破壊的な変更をするとデフォルト値が書き変わってしまう。

以下はデフォルト値に空の配列を指定した場合の例。

“`rb
class C
include ActiveModel::Attributes

attribute :hoge, default: []
end

c = C.new
c.hoge << 😡 c = C.new c.hoge #=> [:x] # [] が期待値のはず
“`

この挙動によるバグを引き起こしやすい `attribute :hoge, default: []` や `attribute :hoge, default: {}` のような記述が、アプリケーションコードに入らないようにするための Cop が `Rails/AttributeDefaultBlockValue` である。

https://do

元記事を表示

Railsでcheckboxとvalidationを使っただけなのに

## 結論

– `form.check_box`はfalse値を送信できない。
– Ruby on Railsでmodelの真偽値(true/false)のvalidationを書くときは、`presence: true`ではなく`inclusion: [true, false]`を使わないといけない。

## 経緯

[Rails をはじめよう](https://railsguides.jp/getting_started.html)に沿ってrailsを触ってみていました。ただ、そのままやるのはおもしろくないなと思ったため、ガイドでは記事(`Article`)を表示するウェブページを作成したところを、少しだけアレンジして`Todo`を表示するものとして作成していました。`Todo`は`Article`のもつ値に加えて`hasDone`という完了済みか否かを表す値を持ちます。

`hasDone`は`Todo`を作成するときに、View側からは

“`erb

<%= form.label :hasDone %>
<%= form.check_

元記事を表示

[Rails][Ruby] update_allとwhereを使用するときに気をつけること

## はじめに
未経験からエンジニアに転職して、2ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。
今回は大量のレコードをまとめて更新するときに重宝する update_all についてです。

## 結論
update_all を使用するときはクエリの実行タイミングに注意しよう。

## update_all とは
>条件に一致するレコードをSQLを直接実行して全て更新
updated_atとupdated_onは更新されない

バリデーションやトランザクションを無視する点も注意が必要です。

https://railsdoc.com/page/model_update_all

## クエリキャッシュのタイミングに注意
~~~ruby
def update_user_data
#このタイミングではクエリは走らない
users = User.where(id: XXX, status: XXX, …)

#上記 where と組み合わせて UPDATE users … FROM … WHERE … が走る
users.

元記事を表示

【Rails】投稿記事の公開/非公開機能 Boolean

投稿記事に公開・非公開機能をラジオボタンで実装したので記録を残します!
間違っている箇所があればご指摘頂けると大変助かります(_ _).。o○

##### 前提
・Deviseログイン機能実装済
・Postテーブルにboolean型でカラム追加(今回のカラム名:is_published_flag)

#### Postモデルに条件式を定義

“`
/app/controllers/posts_controller.rb

class Post < ApplicationRecord belongs_to :user # 公開・非公開機能 scope :published, -> {where(is_published_flag: true)}
scope :unpublished, -> {where(is_published_flag: false)}
~省略~
end
“`
scope :スコープの名前, -> { 条件式 }
公開・非公開を見分けられるように条件式を書きます。

#### Postsコントローラー

“`
/app/contro

元記事を表示

AWS Fargateからherokuに移行した話

## はじめに
※ 自分用メモ
awsの無料期間がそろそろ切れそうなので、バックエンドをherokuに移行したお話

## 移行前
#### バックエンド
言語・フレームワーク: Ruby、 Ruby on Rails
インフラ: AWS ECS(Fargate)、ECR、Route53(ドメイン取得はお名前.com)、RDS(Mysql)無料枠があるから、Auroraではない、ALB、ACM、S3、EFS

#### フロントエンド
言語・フレームワーク: React、NextJs
インフラ: バックエンドと同じ

#### ミドルウェア
webサーバー: Nginx
DB: mysql

## 移行後
#### バックエンド
言語・フレームワーク: Ruby、 Ruby on Rails
ミドルウェア: Nginx、mysql
インフラ: heroku、jawsdb、S3

#### フロントエンド
言語・フレームワーク: React、NextJs
インフラ: vercel、Route53(ドメイン取得はお名前.com)、ACM

### バックエンド移行(aws ⇨ hero

元記事を表示

【Rails7】Rails7 Hotwire × TailwindCSS SPA風ポートフォリオor個人開発アプリの下地を作ろう!(環境構築・投稿機能作成まで)

## はじめに
未経験からエンジニアに転職して、2ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。
その中で、RailsにHotwireを使用して作成したアプリが、
+ 未経験からエンジニアに転職するためのポートフォリオ
+ 個人開発のアプリ

に向いているのではないかなと思いました。

## なぜポートフォリオ or 個人開発に向いているか
**エンジニア歴2ヶ月の弱弱エンジニアの意見なので、あくまで参考程度に考えていただきたいです。**

**結論**
**フロントエンドのコードをほとんど書かなくても、SPA(シングルページアプリケーション)風のサービスを比較的簡単に作成できるからです。**

比較的というのは、VueやReactなどのフロントエンドのフレームワークを使用するより、という意味合いです。

自分自身、エンジニアに転職する時に完全SPAのポートフォリオを作成しました。
転職活動の際には、
**未経験でここまで作りきることができるのはすごい**
というような評価をもらうことが多くありました。(あくまで未経験にしては、ということで

元記事を表示

OTHERカテゴリの最新記事