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

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

Rails7で外部URLのリダイレクトは例外が発生するようになった

Rails7でリダイレクトの処理が少し変わったので見ていきます。

## Rails のリダイレクト

Railsでは以下のように書くとリダイレクトすることができます。

“`ruby
# 内部URL
redirect_to root_path
# 外部URL
redirect_to ‘https://example.com’
“`

## Rails7 のリダイレクト

Rails7からは Open Redirect protection がデフォルトとなり、外部のURLにリダイレクトすると`UnsafeRedirectError`発生するようになりました(内部のURLにリダイレクトするときは今まで通りです)

例外を発生させないようにするために、`allow_other_host: true`を設定する必要があります。

“`ruby
redirect_to ‘https://example.com’, allow_other_host: true
“`

## URLが内部URLかチェックする

パラメータでURLを渡す場合は、外部のURLになる可能性もあります。`Uns

元記事を表示

【Rails7】 Simple Form でdata属性をつける

# 初めに
Rails7
simple_form
haml
を使っています。

調べても出てこなくて45分潰れました。
hamlで書いてます。

# 結論
こうじゃなくて
“`haml
= f.input :name, data: { hoge: ‘hoge’ }
“`

こう
“`haml
= f.input :name, input_html: { data: { hoge: ‘hoge’ } }
“`

### 参考
https://developer.mozilla.org/ja/docs/Learn/HTML/Howto/Use_data_attributes

元記事を表示

フォロー、フォロワー機能の実装

# モデルの作成を行う
– Userモデルの中間テーブルとなるRelationshipモデルを作成する

– カラムは、以下となります
follower_id : フォローしたユーザー
followed_id : フォローされたユーザー

“`
$ rails g model Relationship follower:references followed:references
“`

– 上記コマンド作成されたファイルに下記を追記
`foreign_key: { to_table: :users }`
“`:(作成日時)_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.2] def change create_table :relationships do |t| t.references :follower, foreign_key: { to_table: :users } #追記 t.references :followed,

元記事を表示

ChatGPTに適当に指示してRubyプログラムを書いてもらう

## はじめに

[ChatGPT](https://openai.com/blog/chatgpt/)というAIチャットが昨年暮れから話題ですね。
なにか質問すると、まるで人間のように的確な受け答えをしてくれる有能なAIです。

最近だとGoogle社内で、ChatGPTの台頭にCodeRedを宣言したという記事も出てましたね。

記事: [ChatGPTのリリースでGoogleは「コードレッド」を宣言、AIチャットボットが検索ビジネスにもたらす脅威に対応するためにチームを再割り当て](https://gigazine.net/news/20221223-google-code-red-against-chatgpt/)

一方でChatGPTはプログラムコードも書けるということなので、適当に指示を出してどのていど良い感じのコードを書いてくれるのか、Rubyで試してみました。

## 手始めに簡単なプログラムを
とりあえず簡単なプログラムを書いてみてもらいました。

![スクリーンショット 2023-01-19 10.16.28.png](https://qiita-image-st

元記事を表示

RubyonRailsにスクレイピング機能を持たせてみる。

## はじめに
今回は連載企画第2回目ということで、スクレイピングについて書いていこうと思います。
### これまでに書いた記事はこちら
– [【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)
– [Ruby on RailsのアプリにLINEを組み込む。](https://qiita.com/prg_mt/items/b3238ebfae1a3df67cab)

## gemの導入
まずはじめに、gemを導入します。
以下の記述をgemfileに追加してください。
また、seleniumはRSpecで通常使用するものになりますので、`group :test do ~ end`のブロックの中にすでに記載がある場合はブロック外に記載を移すようにしてください。

“`ruby:Gemfile
# selenium
gem ‘selenium-webdriver’
“`

上記を記載しましたら`bundle install`を実行してください。

## ChromeDr

元記事を表示

【AWS】自動デプロイ後にアクセスしたら502 Bad Gateway

## 結論
deploy.rbに記載ミスがあった。
なんとこれだけです。

## 経緯
AWSへのデプロイに初挑戦。
手動でのデプロイ時点では上手く行っていたのに自動デプロイを試みると502 Bad Gatewayとエラー。
なんじゃこりゃ、、、?

## 502 Bad Gateway とは
とりあえずググってみた。

“`
502 Bad Gatewayとは、ウェブサイトのサーバーの通信状態に問題があることを示すエラーメッセージです。
以下のようなエラー画像が表示されます。
“`
参考:https://blog.hubspot.jp/502-bad-gateway

通信状態? 
AWS側の不具合やらこっちのWifiが原因ってことかな?
、、、ってそんなわけあるかーーー!

## 原因
以下の記事を参考に原因究明。
https://qiita.com/kana_web/items/638a5d605870558879a4

こちらの記事から、ファイルとディレクトリの位置関係を洗い出すことに。

### currentディレクトリに移動できるか確認してみる
“` :ターミ

元記事を表示

React と Rails でアプリを作成してみた【TODOアプリ】

## React on Rails

Rails
■ データをJSON形式で返す
■ MVCのMとCを担当

React
■ MVCのVを担当

## JSONとは?
JSONは「JavaScript Object Notification」の略で、JavaScriptで値を取り扱うためのドキュメント規格の事。
もともとはJavaScript上で値を取り扱うためのフォーマットだったが、JavaScriptで値を扱う上で便利に利用できることから、JavaScriptフロントエンドの普及に伴い、バックエンドと通信する際のフォーマットとして利用されはじめた。

## 環境の準備

“`
rails new <プロジェクト名> –webpack=react -T
yarn add react-router-dom axios styled-components react-icons react-toastify

//react-toastify ユーザーに対してエラーその他アラートを表示させるときに便利な機能
“`

## model & table & data

“`
rai

元記事を表示

github actionsのrunner-osのアップデートの際サービスコンテナを使ってmysqlのバージョン対応した話

github actionsのrunner-osを今まで`ubuntu-18.0.4`を使ってたが、今更ながら
アップデートしました。
https://github.com/actions/runner-images/issues/6002

### 変更後
“`yml:workflow.yml
jobs:
runs-on: ubuntu-latest
“`

### 困ったこと
これで再プッシュして一件落着かと思ったが、プッシュ後データベースのマイグレーションjobでテストが落ち、調べていると`ubuntu-latest`のラベルを指定すると`ubuntu-22.0.4`のイメージを使うことになるらしい。
https://github.com/actions/runner-images#available-images
んでこちらのイメージだとプリインストールされているmysqlは8系だよとのこと。
https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md

CI

元記事を表示

パーシャルのオプションを使うには

# エラーになる
“`html
.
.
.
<%= render '*****/******', locals: {variable: @user} %>
.
.
.
“`
“`undefined local variable or method `variable’ for #“`

どうしてローカル変数を設定したが、定義されていないと書かれてある。

# ドキュメントをじっくり読んでみた
“`:layoutなどの追加オプションも渡す場合は、:partialオプションも明示的に指定する“`必要があります。

### 出典
https://railsguides.jp/layouts_and_rendering.html#:~:text=%3Alayout%E3%81%AA%E3%81%A9%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%82%E6%B8%A1%E3%81%99%E5%A0%B4%E5%90%88

元記事を表示

Rails7 のフロントエンド関連の Gem を分類

## はじめに

最近の Rails にはフロントエンドに関係する `ooooo-rails` といった Gem がたくさんあります。
たくさんありすぎてよくわからなかったので、分類してみました。

## 結論

| 関心 | Gem |
| ———————————————— | ————————————————– |
| アセットパイプライン | sprockets-rails, propshaft |
| JavaScript, CSS の管理(Node.js を使う場合) | jsbundling-rails, cssbundling-rails

元記事を表示

ページネーション

# ページネーションとは
– ページを複数に分割することができるもの
– レイアウトを調整したるするのに便利
– グーグルのページなどの下部に表示されているやつ
![スクリーンショット 2023-01-18 3.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/aea865c8-9b12-0c31-6df0-63d9048125ab.png)

# 実装方法
– kaminariというgemを使用する

“`:Gemfile
gem ‘kaminari’,’~> 1.2.1′
“`

“`
$ bundle install
“`

– 設定ファイルを作成する
下記コマンドで作成されたフォルダの中にページネーションの部分のhtmlが記述されているので変更を行う際は適宜修正する
“`
$ rails g kaminari:config
“`

– kaminariのテンプレを作成
“`
$ rails g kaminari:views default
“`

– c

元記事を表示

deviseをアップデートしたらomniauthエラーで詰まった

### はじめに
deviseをアップグレードするために、omniauthのバージョンも同時にアップグレードしたら一部のコールバックがnilになってハマってしまったので共有します。

### やったこと
– device, omniauthをアップグレードした
“`diff_ruby:Gemfile
– gem ‘devise’, ‘4.4.3’
– gem ‘omniauth’, ‘~> 1.9.0’

+ gem ‘devise’
+ gem ‘omniauth’
“`

“`diff_ruby:Gemfile.lock
– devise (4.4.3)
+ devise (4.8.1)

– omniauth (1.9.2)
+ omniauth (2.1.0)
“`

### 発生した問題
oauth認証で必要な値が`nil`になってしまった。
“`ruby
[1] pry> request.env[‘omniauth.auth’]
=> nil
“`

### 解決方法
– こちらにも同様の現象が起きているとissueがあがっていたのを発見。

https://g

元記事を表示

実務未経験者がRailsで予約管理アプリを作成しました!(simple_calendar)

アプリ概要

ヘッドスパスクールの授業を予約するアプリを作成しました。
イメージとしては美容室などの予約アプリのようなシステムです。

まず教師側が授業可能な日程を登録し、その日程の中から生徒が日程を選択し、授業を予約するという使い方です。

https://jsmc-machido.com/

https://github.com/keiino0425/JSMCreserveapp

作成背景

プログラミングの学習を進めていたところ、知人がヘッドスパスクールを始めたいという話をしていたので必要なシステムがないかヒアリングしたところ、予約を管理するシステムが必要とのことだったので作りました。

使用イメージ

講師側

講師用のマイページで仮予約や予約を確認できます。また、仮予約は確定もしくは削除すると生徒にメールが自動送信されます。

![スクリーンショット 2023-01-17 0.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

【個人開発】キャンプ旅行に持っていくキャンプ道具を共有するアプリ – Camplet –

# はじめに

初めまして@asaAxisと申します。
この記事は初学者が初めて個人開発したWebアプリの紹介記事です。
Campと旅行のPamphletの意味を込めてCampletという名前にしました。

アプリURL : http://52.69.152.68/
旅行の際にキャンプ道具を共有する 大変さから解放されます!

# 開発の経緯

![開発経緯説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881856/e485df4f-8432-efa7-05f3-f03eeae416ed.png)

キャンプをやったことがない人でも、
**持っていく道具が多そう…
何を持って行けば良いの?** とか…

そういった、ことを減らすためにこのアプリを開発しました。
旅行の際にキャンプ道具を共有する大変さから解放される!
をコンセプトに開発をいたしました。

# 開発環境
* Ruby 3.0.1
* Ruby on Rails 6.1.7
* PostgreSOL 14.5

# 主な機能

元記事を表示

メールアドレスの長さのバリデーションをかける

# メールに最大長はあるのか?
* メールアドレスの長さは“`254文字を超えてはならない“`
* RFC5321などを見ればメールアドレスは320文字まで許容できそうだが、RFC2821のメール送信プロトコルの仕様からは、区切り文字も含めて256文字以内となっている。区切り文字も含めるということは、キャリッジリターンとラインフォールドも含めていうことなので、実質、“`メールアドレスとして許容できるのは、254文字まで“`となる。

### 出典
https://blog.anderiens.com/entry/length-of-mail-address#:~:text=%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E9%95%B7%E3%81%95%E3%81%AF254%E6%96%87%E5%AD%97%E3%82%92%E8%B6%85%E3%81%88%E3%81%A6%E3%81%AF%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84

htt

元記事を表示

form_withのscopeは何をしているのか

## 環境
Rails 5.2

## 内容
form_withのパラメータのscopeはどのような動きをしているのか確認してみました。結論を言うと、scopeを指定すると、ViewからControllerにPOSTするとき、Viewに入力した値が、paramsハッシュにセットされます。

更新処理をするとき、form_withのパラメータには、通常、modelがよく使われます。下記の書き方だけで、newのときは画面に入力した値をcreateメソッドにPOSTで転送し、editのときはupdateメソッドにPUTで転送します。また、editのときは、idがparamsハッシュにセットされるため、コントローラの中でparams[:id]とすると、idの値を取得することができます。

HTTPのどのメソッドを使って転送し、どのコントローラのどこのメソッドに入ってくれるかの判断は、Railsが裏側で自動的に行ってくれます。この辺が、Railsの便利なところでもあり、また、初学者が難しいと感じるところでもあろうかと思います。
“`_form.html.slim
form_with model

元記事を表示

[Rails]Railsアプリケーションの雛形作成

概要

Railsアプリケーションの雛形作成と削除方法を簡単に説明します。
拙い文章で申し訳ございません。
記事の記述方法や内容に不備等ございましたら、指摘してくださると幸いですm(-_-)m

# 環境
IDEはAWSのcloud9を使用しています。
Rubyのバージョンは3.1.2
Railsのバージョンは6.1.7

アプリケーションの雛形作成方法

結論としては、「rails new」コマンドを実行します。
記述方法は以下の通りです。

“`
rails new アプリケーション名
“`
例として、「SNS」というアプリケーション名で作成する場合は
“`
rails new SNS
“`
となります。

rails newを実行する際に注意する点が2点あります。
– スペルミス
– 半角スペースの場所を間違えない

特に2点目の「半角スペースの場所を間違えない」というのは、どのような場合か

例えば、先ほど例同様に「SNS」というアプリケーションを作成した際
“`
rails newSNS
“`
と入

元記事を表示

ymlとは(使い方も少し)

# 疑問
* .ymlとは?
日本語に翻訳に使ったファイル。
初めて使った一応触りだけでも理解をしておきたい。

# YAML【YAML Ain’t Markup Language】YMLファイル / .ymlファイル
* YAMLとは、“`何らかの構造を持つ“`データ集合を簡素な“`文字列の並びとして表記するための記法“`を定めた“`データ形式の一つ“`。
“`ソフトウェアの設定ファイルの記述や異なるソフトウェア間のデータ交換などでよく用いられる。“`

# 出典
https://e-words.jp/w/YAML.html#:~:text=YAML%E3%80%90YAML%20Ain’t%20Markup,%E3%81%AA%E3%81%A9%E3%81%A7%E3%82%88%E3%81%8F%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%82%8B%E3%80%82

* * ファイルの書き方ルールだよ
* point構造化されたデータを表現できるよ
* point「YAML Ain’t a Markup Languag

元記事を表示

railsのconfigとは

# 疑問
* config/application.rb内で“`config. …“`と書いている。
この“`config“`とは何なのか?知りたい。

# 設定ファイル(config)
設定ファイルについて

### 説明
Railsでは、config/以下の設定ファイルによって設定を変更

### 特徴
“`「config.パラメータ名 = 値」“`の形式で設定
設定を反映するには、“`サーバの再起動が必要“`
文字コードは、UTF-8

### 主な設定ファイル
説明
application.rb “`すべての環境で共通の設定“`ファイル
environment/ 環境ごとの設定ファイルを格納するディレクトリ
development.rb 開発環境での設定ファイル
test.rb テスト環境での設定ファイル
production.rb 本番環境での設定ファイル
initializers/ その他の初期化処理や設定情報などを格納するディレクトリ
infiections.rb 単数形・複数形のルールを設定
mime_type

元記事を表示

Ruby on RailsでDBを途中からmysqlに変更したいときに変更する場所

# はじめに
当記事はRuby on Railsでアプリケーションを作成している途中でDBを変更したいと思ったときに変更する場所を記します。
今回はSQLiteからmysqlへ変更します。

また、最初からmysqlで始める場合は以下のコマンドで`new`することでmysqlで開始することができます。

“`terminal:terminal
rails new アプリケーション名 -d mysql
“`

# 環境

“`terminal:terminal
$ ruby -v
ruby 2.7.3
$ rails -v
Rails 7.0.4
mysql -version
mysql Ver 8.0.31
$ bundle -v
Bundler version 2.1.4
“`

# 前提条件

* DBの設定が完了していること。(mysqlだと最低限、rootユーザーでアクセス可能である。)

# DB変更

1. Gemfileに以下を追記する。

“`:/Gemfile
gem “mysql2”
“`
1. terminalから`Gemf

元記事を表示

OTHERカテゴリの最新記事