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

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

Railsのバージョンアップ時にCSRFトークンに悩まされた話

Railsを使用していると、普段何気なく運用しているCSRFという仕組み。
このCSRFについて、Railsのバージョンアップ時に苦戦した経緯がありましたのでシェアしたいと思います。
そもそもCSRFとは?という方については、下記に分かりやすく解説してくれている記事がありますのでそちらを参考にして頂ければと思います。
[RailsのCSRF対策について](https://qiita.com/eshow/items/915f8e8ad317aa8e49a6)

### Railsのバージョンによって生成されるCSRFトークンが異なる
今回のバージョンアップではRailsを6.1→7.0に上げたのですが、この旧バージョンと新バージョンで生成されるCSRFトークンが異なります。どのような違いかというと、旧バージョンでは通常のBase64でトークンがエンコードされるのに対し、新バージョンではURLセーフなBase64でエンコードするようになりました。
そしてこのトークンが異なる状態で、ページ遷移するとArgumentErrorを引き起こします。(この時は旧バージョンから新バージョン、新バージョ

元記事を表示

【RSpec】基本的なRSpec導入手順

## はじめに
超初歩的なRSpec導入部分のみです
実践はしてませんのでご注意ください

## 環境
Rails: 6.1.4
Ruby: 2.6.3
RSpec: 3.10
rspec-rails: 5.0.1

## 手順
1.Gemfileに記述

“`ruby:Gemfile.rb
:
:
group :test do
gem ‘capybara’
gem ‘rspec-rails’
gem “factory_bot_rails”
gem ‘faker’
end
:
end
“`
“`terminal:terminal
bundle install
“`
2.↓必要なファイルをインストールする

“`terminal:terminal
rails g rspec:install
“`
3.specフォルダにfactoriesフォルダを作成
         ↓
factoriesフォルダの中にモデル名.rbを作成
例)book.rbやarticle.rbなど

4.テストデータを定義する

“`ruby:spec/fact

元記事を表示

graphql-rubyで入力値バリデーションをカスタマイズする

# 背景とやりたいこと

graphql-rubyにはargumentに対して[バリデーション](https://graphql-ruby.org/fields/validation.html)をかけることができるのですが、

愚直にやると以下のようなpathとlocations付きの形式でエラーが返ってきます。

参考: [https://graphql-ruby.org/errors/execution_errors#adding-errors-to-the-array](https://graphql-ruby.org/errors/execution_errors#adding-errors-to-the-array)

“`json
{
“errors”: [
{
“message”: “Can’t continue with this query”,
“locations”: [
{
“line”: 2,
“column”: 10,
}
],

元記事を表示

rails cでの記述map,ppについて

## 残しておきたい内容
メンターの方に質問した際にrails cをしている際に気になる記述をしていたので調べて自分の記録用として残しておこうと思います。

## map
each文のようにモデルの内容を順番に表示できる
配列変数.map {|変数名| 具体的な処理 }
“`
2.6.3 :002 > Dish.all.map{|d|d.dish_image}
“`
“`
2.6.3 :002 > Dish.all.map{|d|d.dish_image}
Dish Load (0.2ms) SELECT “dishes”.* FROM “dishes”
=> [#

元記事を表示

新規投稿時にundefined method `upload’ for nil:NilClassエラーについて

## 解決したいこと
料理投稿サイトで新規投稿画面にてタイトル、紹介文、画像の情報を入力し新規投稿したところundefined method `upload’ for nil:NilClassエラーが出て解決をしたい。
前提・・・Active Strage導入済

## 試して見たこと
データの流れを確認するためにテーブル、モデル、コントローラの記述を一通り確認。
=>これといった間違いはないような感じが。モデルにも has_one_attachedの記述があり問題はなさそう。
コントローラもストロングパラメータは大丈夫。

*/CookOP/app/models/dish.rb
“`ruby
class Dish < ApplicationRecord has_one_attached :dish_image belongs_to :user#, optional: true has_many :comments, dependent: :destroy has_many :favorits, dependent: :destroy end ``` */Cook

元記事を表示

Psych::BadAlias: Unknown alias: defaultというエラーの対処法

開発環境
mac OS バージョン11.6
エディタ
VScode

# やりたいこと
rails db:migrateやrails s -b 0.0.0.0などのrailsコマンドを実行しようとすると下記のエラーになる。

# エラー内容
“`
# rails db:migrate
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
Rails couldn’t infer whether you are using multiple databases from your database.yml and can’t generate the tasks for the non-primary databases. If you’d like to use this feature, please

元記事を表示

rollback transactionの原因の解決方法

## 解決したいこと

ユーザーが写真付きの記事を投稿した際にターミナルでrollback transactionのエラーが表示され、DBに保存ができない状態を解決したいです。
 
## 解決するために試したこと
1、  rollback transactionのエラーについて気になったので調べました。
簡単にいうと保存するためのカラムの培養が不足しておりsaveができない状態とのこと。

2、 コントローラのcreateアクションにある@dish.saveの記述を@dish.save!にすることでエラーの内容が表示されるとのことでそちらも試して見たところ「Validation failed: User must exist」エラーが出ました。直訳すると「バリデーションに失敗しました。ユーザーは存在しなければなりません」となりました。Userモデルに値が入っていないためバリデーションで弾かれていた様子。

3、 2で出てきたエラー「Validation failed: User must exist」を調べると解決の鍵となる内容の記事に出会いました。

## 解決方法

optiona

元記事を表示

『個人開発』行きたい場所をストックしよう 「ココイコApp」

## はじめに

![スクリーンショット 2022-04-10 21.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1390680/81bd3e80-3d80-8506-5a30-61f7ea5fd451.png)

ここ行こ?
コロナが終わったらね。
いつしか行きたかった場所を忘れてしまう。を解決するアプリ「ココイコ」をリリースしました!!

## サービス開発の経緯
大学生でエンジニア長期インターンに挑戦したく、ポートフォリオを作りたかった
どんなものを作ろうかと考えていた時期に、コロナが終わったらここ行こうね!!と話していた場所
をすっかり忘れていたことに気がついた
世の中の多くの人が、「ここ行きたい!! 」「コロナが終わったらね。」という会話をしているのではないかと考えた

こんな感じ?
![sp-kokoiko-qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1390680/dceaa79

元記事を表示

【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました

## はじめに
はじめまして!
個人開発者の[ハガユウキ](https://twitter.com/KvOKJo6SH85w2Q8)と申します。

突然ですが、皆さん正規表現はお好きですか?
私は好きです。「複数の文字列を一つのパターンで表現できる」部分にすごく面白味を感じています。
もっといろんな方に正規表現を知っていただきたい、好きになってほしいと思っています。

しかし、現状では2つの課題があると感じています。
– 正規表現の勉強自体がそもそも面白くない。
– 正規表現を勉強しても、しばらく使わないと忘れる。

この2つの課題を突破できるサービスは、現状存在しません。
そのため、楽しみながら正規表現を学べるサービスがあれば良いなと思いました。

**作りました。**

▼スライド型正規表現学習ゲーム【Regex Hunting】
https://www.regex-hunting.com/
(※) 端末はPC、ブラウザはChromeが推奨です。
![ogp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【開発未経験】Railsでサ活(サウナ活動)を管理できるアプリを作成しました。

# 1.はじめに
本記事を閲覧いただきありがとうございます!
転職活動用のポートフォリオとしてRailsでサ活(サウナ活動)の記録を管理するためのアプリを作りました。この記事はアプリの紹介や作成した経緯をまとめたものです。

## 自己紹介
– メーカー勤務の24歳。4月で新卒3年目になりました
– 働きながら毎日プログラミング学習中
– サウナとサッカーが大好き

# 2.作成したアプリについて
サウナ好きがサ活(サウナ・水風呂・外気浴の時間)を記録して管理するためのアプリです。
– アプリ名: **『ととのい』**

– アプリURL: https://totonoi.org/
– GithubURL: https://github.com/matsuken314/onsen_app

ホーム画面からゲストログインできます。(その他、新規登録画面からも可能です。)
![guestlogin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1584967/bd92403f-750e-2f50-3801

元記事を表示

【Rails】1つのform_withで複数のテーブルに保存をかける

こんにちは。

既存の投稿フォームからジャンル情報を保存できるように
form_withを加筆修正することになりました。
その際様々な記事を参考にさせていただきましたが、
中々に上手くいかず多くの時間を溶かしました。
非常に非常に非常に苦労を要したので、ここにアウトプットし
知識の整理と共に同じく苦労している人の一助となればいいなと思います!

尚、今回試行錯誤を繰り返して実装したので
指摘箇所がございましたらご教授いただけますと幸いです。

## :ok_woman: 対象

– 一つの`form_with`で複数のテーブルに保存をかけたい。
– `accepts_nested_attributes_for`を使用せずに実装したい。
– `to_model`を使用せずに実装したい。
– Form Objectで実装したいけど、詰まっている。

## :rolling_eyes: はじめに

前提として、通常の新規投稿と編集削除ができる状態からスタートします。
また、今回は`CarrierWave`と`Devise`を使用しており、それらの実装などは省略いたします。
Railsバージョ

元記事を表示

deviseを使用時に名前を表示できない時の解決方法

## 困っていたこと

以下のコントローラ、ビューの記述でサインイン後ユーザのnameが表示されると思っていましたが表示されません。
rails cなどで調べるとそもそも新規登録時に名前が保存できていませんでした。

*users_controller.rb
“`ruby
def show
@user = User.find(params[:id])

end
“`
*/users/show.html.erb
“`ruby

Users#show

<%= @user.name %>
“`

userテーブルにもnameの記述をしているしどこが原因を調べていました。

“`ruby
create_table “users”, force: :cascade do |t|
t.string “email”, default: “”, null: false
t.string “encrypted_password”, default: “”, null: false
t.string “reset_password_

元記事を表示

【超簡単】RubyonRails 投稿時間をInstagramのようにする 〜 ◯日前,◯時間前,◯分前 〜

# はじめに
とっても雑な記事ですが、少しでも誰かに役に立てばと思い記事にしました。

## 前提
簡単な投稿機能が実装済みであること
Railsの基礎的な知識を身につけていること

## 実装方法

### コントローラー
投稿時間を計算するために、コントローラーで今日の日付や、現在時刻を取得します。

“`tweets_controller.rb
class TweetsController < ApplicationController def index @today = Date.today #今日の日付を取得 @now = Time.now #現在時刻を取得 @tweets = Tweet.all #tweeetsテーブルの全レコードを取得 end (略) ・ ・ ・ end ``` ### ビュー 投稿時間に関するところの解説は下に記載しております。 ```erb:tweets/index.html.erb

<% @tweets.each do |t| %>

元記事を表示

WindowsでのVagrantを用いたRails6環境構築

# 初めに
ローカルでRailsの環境構築を行いCloud9(AWSの統合開発環境)の環境をローカルで再現したかったが、Rails5とRails6を切り替えて開発を行いたい・という背景と仮想環境はかっこいい!!という安直な発想からVagrantを用いて環境構築を行うこととした。
今回はRails6の環境構築を行います。
間違えたことをしていたらコメントにてご指摘いただけれると大変助かります。

# 使用環境
Windows 10

# Vagrantで構築したい環境
大雑把に以下の構成で構築したいと考えています。
– ruby 2.6
– rails 6.1.4
– ImageMagick
– sqlite
– mysql(本番環境用)
– Node.js 16
またrailsではjavascriptランタイムが必要になるためNode.jsのインストールも行います。

# 手順
目次になっているので以下を参考にしてください
1. [VirtualboxとVagrantのダウンロード](#1-virtualboxとvagrantのダウンロード)
1. [Vagrantを用いたCentOS

元記事を表示

さくらvpsにRailsアプリをデプロイするまで (4) Homebrew導入

# 1. Homebrewを入れたい
 ローカルと同様に、さくらvpsにもHomebrewを入れてみようと思った。ひとまず公式ページから以下の文面をコピペしてやってみる。

https://brew.sh/index_ja

“`
# /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

そうするとエラーが出た。

“`
略….
curl: (1) Protocol “https” not supported or disabled in libcurl
“`

curlがhttpsに対応してないらしい。なんと。ためしに`curl -V` とやるといっぱいでてきたけどhttpsの文字はなかった。
コピーをとってなかったが、たしか初期にあったバージョンはcurl v 7.2くらいだった。

yumでcurlのバージョンアップをしようとしたが、バージョンが上がらなかった。どうしよう。パッケージからやっていくことにした。

# 2.

元記事を表示

Rails x Nuxt.jsのSPAをECSのfargateへデプロイする際にハマったこと・その対処法

## はじめに
[こちらの記事](https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/2ac314f5633e674d4b0c)を参考にデプロイしてハマったこととその対処法を備忘録として書いていきます

# 1. Zeitwerk::NameError
Railsアプリのタスクが起動せず以下エラーが発生
“`
Unable to load application: Zeitwerk::NameError: expected file /app/app/controllers/hoges_controller.rb to define constant HogesController, but didn’t
“`
ディレクトリ構成が`controllers/v1/コントローラのファイル`となってるところを、1つ上を読み込んでしまっている状態

## 対処法
application.rbに以下を追加
“`:api/config/application.rb
config.autoloader = :class

元記事を表示

プロジェクトのgem, 端末にインストールされるgem,どっちを使うか指定する方法

## gemとは?
2つの意味があります。
1. **Rubyのライブラリ** のことです。詳細は[こちら。](https://www.ruby-lang.org/ja/libraries/)
1. **gemを管理するパッケージ管理ツール**の名前

ただ、gemというツールでパッケージを管理すると、依存関係で問題が発生することがあります。
そこでBundlerが登場します。

## bundlerとは?
依存関係を考慮してgemを管理してくれるパッケージ管理ツールです。
https://bundler.io

## Gemのインストール方法は大きく2種類

1. 端末全体で使えるタイプ(globalインストール)
mac,windows内のどこでも使えるようになる。
1. プロジェクト(特定の階層)でのみ使えるタイプ(localインストール)
作っているアプリの中で使えるようになる。

# 結論

### `bundle exec`をつける = ローカルインストールのgemが呼ばれる
例)
“`
bundle exec rails g controller users

元記事を表示

ActiveSupport::Concernでモジュールを作る

## Concernとは
Concerntとは「関心事」という意味で、Railsではコントローラやモデルの一部の概念や機能を実装するモジュールのことを指します。Concernを用いることで、ある特定の概念や機能をコントローラやモデルから切り出すことができ、複数のコントローラやモデル間で使い回すことができます。クラス、モジュール間のincludeやextendの説明はここでは省きます。

## スコープ
以下のようにPhotoモデルとVideoモデルに共通のスコープが定義されていたとします。

“`ruby:photo.rb
class Photo < ApplicationRecord scope :display_member_only, -> { where(member_only: true) }
end
“`

“`ruby:video.rb
class Video < ApplicationRecord scope :display_member_only, -> { where(member_only: true) }
end
“`

このとき、以下

元記事を表示

【Rails エラー】 NameError (uninitialized constant クラス名)

Rails cで、Rails: NameError (uninitialized constant クラス名)のエラーに遭遇。

以下を試したところエラーが消えました。

“`
$ exit #rails cから一旦出る
$ spring stop
$ rails c #もう一度、rails c
“`

元記事を表示

rails db:seed 重複データを削除する方法

rails db:seedは上書きされると勘違いしており、
rails cで確認するとデータが重複していた。
データベースの中身をリセットしてから、再度 rails db:seedを実行する。

“`
$ rails db:seed:reset
“`

“`
$ rails db:seed
“`

元記事を表示

OTHERカテゴリの最新記事