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

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

Ruby on Rails初心者の学習記録 Part3:CRUD(前編)

# はじめに
Ruby on Rails初心者の学習記録Part3です。
[Part1](https://qiita.com/Yasushi-Mo/items/d24fd4abab2c1333c522)では、Rubyの基本文法やRailsを利用したWebアプリケーションの開発環境構築手順及びルーティングについて学びました。
[Part2](https://qiita.com/Yasushi-Mo/items/5dfe81d39b5a153fe43c)では、MVCアーキテクチャのモデルについて学びました。
Part3とPart4では、 [“Getting Started with Rails”](https://guides.rubyonrails.org/getting_started.html) の [“7 CRUDit Where CRUDit Is Due”](https://guides.rubyonrails.org/getting_started.html#crudit-where-crudit-is-due) を教材にして、**CRUD**を学んでいきたいと思います。まず

元記事を表示

Railsの部分テンプレートで「ActionView::MissingTemplate」

### エラー発生時の状況
部分テンプレート(パーシャル/partial)機能を使おうとしたところ、
app/views以降のパスを正しく指定しているつもりなのに、エラーが発生。
「Missing partial〜」と言われてしまいました。
before.png
この場合、何が間違っているのでしょう…?

### エラー原因
パーシャル用に作ったファイル名が間違っていました。
手動でパーシャルするerbファイルを作る際は、
ファイル名の先頭に`アンダースコア(_)`をつける必要がありました。
スクリーンショット 2023-01-23 5.49.23.pngWebパフォーマンスボトルネックのチェックリスト

# 概要
Webシステムのパフォーマンスが悪くなった際、どの観点で見るべきなのか漏れてしまう可能性があるため、チェックリストとして観点をまとめました。

**※この記事は都度更新して観点を追加します!**

# Webパフォーマンスとは
MDNの「[ウェブパフォーマンスとは](https://developer.mozilla.org/ja/docs/Learn/Performance/What_is_web_performance)」では以下のように解説されています。
> ウェブパフォーマンスとは、遅い処理を速く見せることも含めて、ウェブサイトを速くすることです。サイトがすぐに読み込まれるか、ユーザーがすぐに操作を始めることができるか、何かの読み込みに時間がかかっている場合には安心感のあるフィードバック (ローディングスピナーなど) を提供しているか。スクロールやアニメーションはスムーズか。

今回は下記の2つの点に着目してチェックリストを考えていきます。
1. サイトの読み込み時間を削減する
1. ユーザーが操作可能な状態を早く実現する

## 1. サイトの読み込み時間を削減する

元記事を表示

【Rails】 acts_as_taggable_onでハッシュタグ機能を作る

# 概要
タグ機能をさくっと作ることができるgem
acts_as_taggable_onを利用してハッシュタグ機能を作ります。

※2つの参考記事を組み合わせて多少手を加えただけです
https://qiita.com/d510/items/e1caa8b73d118822a0a2
https://qiita.com/MitsuTurtle/items/614b154641ab4e4b56ba

## 開発環境
Ruby 3.0.2
Rails 7.0.0
Bootstrap 5
slim

## 前提条件
既存のPostモデルがあるものとします。
Postのスキーマ情報
“`ruby:schema.rb
create_table “posts”, force: :cascade do |t|
t.string “title”
t.text “content”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end
“`

このPostモデルにハッシ

元記事を表示

[Rails7][Heroku] Active Storage や ActionText で画像が表示されない問題を解決する

# はじめに
`Rails7` で構築したアプリケーションを `Heroku` にデプロイしたが画像が表示されない問題を解決していきます。
`Active Storage`を使用していることを前提としています。
以下、確認・修正すべきことを書いていきます。

# 画像をアップロードしておくストレージの設定
開発環境ではローカルストレージに保存されますが、
本番環境(今回の記事では`Heroku`)では画像を保存するストレージを設定する必要があります。
これは、ググればたくさん情報が出てきます。
`AWS`の`S3`を使用する構成が簡単でしょう。
本記事では`AWS`の`S3`を使用していきます。

https://qiita.com/hmmrjn/items/479c9e9ce82771f1b6d7

# `AWS`の`S3`のバケットに`CORS`の設定を追加
`AMAZON S3` > `バケット` > `sample buket name`
↑ご自身で設定したバケットを開いてください。

「アクセス許可」というタブを選択してください。
![スクリーンショット 2023-01-2

元記事を表示

RailsでAjax通信を使って項目を絞り込む

# やりたいこと

 個人開発でやっているサービス「lytnote」の改善を行いたい。目標一覧画面にはユーザーが登録した目標が並んでいる。それぞれにはステータスがあって、完了や中止や進行中が選べる。振り返りの際に目標のステータスを変更するのだ。

“`
目標A 状態:進行中
目標B 状態:完了
目標C 状態:中止
目標D 状態:完了
….
“`

 でも使っていくと、目標がどんどん増えてしまう。進行中の目標のみを絞り込んで表示したい。

 目標の絞り込みを行うぞ。

# フロー

“`
目標一覧画面表示

絞り込みたいステータスをプルダウンで選ぶ

絞り込みボタンを押す

絞り込まれる
“`

 これでやっていこう。つくるものを考える。

1. 一覧画面にプルダウン表示
2. コントローラー修正
3. jsファイル修正
4. 一覧画面に部分テンプレート追加

# 1. 一覧画面にプルダウン表示

“`erb:app/views/plans/index.html.erb
<%# 略 %>

<%= form_with url: plans_pat

元記事を表示

MVCゼミ ワーク

# ワークの下準備
**ターミナルでアプリ作成**
“`ruby:ターミナル(コマンドプロンプト)
cd Desktop

rails _6.1.5_ new mvc

cd mvc

code .

rails db:create

# コントローラーを作成してみよう!!

rails g model Post body:string

rails db:migrate

“`

**seedを編集しよう!**
“`ruby:db/seeds.rb
Post.create([
{ body: ‘Web’ },
{ body: ‘コース’ },
{ body: ‘LOVE’ }
])
“`

https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee

**ターミナルで適応**
“`ruby:ターミナル(コマンドプロンプト)
rails db:seed
“`

# MVCを構築していこう!
**Controllerにindexアクションを定義してみよう!**
“`ruby:app/controller

元記事を表示

【忘備録】期間内に特定のカラムが複数回登録されているレコードを抽出する(SQL、Rails、Pandas)

簡単だろうと勝手にたかを括っていたら時間が掛かってしまったため、
忘備録としてメモ。

Booksテーブルから次の条件を満たしたレコードを抽出するSQL文を作成する。

・2022年中に3回以上同じcategoryが登録されているbookレコード

(Booksテーブル)

存在するカラム:category,tag1,tag2,created_at,updated_at

created_atが2022年内なら登録されているとする。

## SQL

“`sql:books.sql
SELECT *
FROM books
WHERE category in (
SELECT category
FROM books
WHERE created_at BETWEEN ‘2022-01-01 00:00:00’ AND ‘2022-12-31 23:59:59’
GROUP by category
HAVING count(category) >= 3
);

“`

## Rails
目的は達成したが、気になったのでついでに考えてみる。

“`ruby:books.rb
categ

元記事を表示

【GitHub Actions】Fargateへの自動デプロイ時にハマったことと対応まとめ

# 概要
下記記事を参考にGitHub ActionsでのCI/CDを構築した。

– test

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

– deploy

https://qiita.com/hatsu/items/a70d5c49a39561836751

※ubuntuとcheckoutについてはそれぞれ最新バージョンに変更して利用した。
– ubuntu→latest
– checkout→v3

テストの方は特に問題なく設定できたが、デプロイではハマる箇所が多かったためまとめ。

# 環境
– アプリ
– ruby 3.0.2
– rails 6.1.4
– mysql 8.0.31
– インフラ
基本的にこちらの記事の通り。

https://qiita.com/hatsu/items/22e11e94a0a981d78efa

HTTPSでアクセスできるようSSL化まで行っている、
ローカル→(HTTPS)→ALB→(HTTP)→Fargate⇄RDS
の状態。

# 発生したエラーと対応

元記事を表示

【Rails】【collection_check_boxes】checked: を使って初期表示をさせる方法

## はじめに
タグ付け機能を実装するためにcollection_check_boxes を使いました。
その際にユーザーがすでにチェックをつけていた場合にはチェックをつけて表示させたかったのですが、その実現に苦労したため、アウトプットも兼ねて記事にしました。
初学者の為、至らない点もあるとは思いますが温かい目で読んでいただけると嬉しいです!

## collection_check_boxes とは?
モデルからチェックボックスを自動生成してくれます。
基本的な使い方については[こちら](https://pote-chil.com/rails_collection_check_boxes/)の記事が分かりやすかったです。

## やりたかったこと
![6670258a385aaca763bd962dc7a73f0d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1374322/79da06bc-4367-f753-a3c3-399418ceebfd.png)

投稿(Episode)を見た閲覧者(Us

元記事を表示

ruby3.1に上げたらrubyの外部コマンド起動がエラーになって途方に暮れたら

ruby2.7を3.1に上げた時、それまで動いていたruby on railsのプログラム起動の仕組みが、起動時に
“`
can’t find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile? (Gem::Exception)
“`
というエラーで起動できなくなりました。

原因と対策はこちらのページに御世話になりました(感謝)。

おおたの物置
 bundle中に別のbundleを呼ぶと予期しない結果になる対策
https://ota42y.com/blog/2015/01/28/bundle-in-bundle/

こちらにあるようにruby3.1の直接の問題ではありませんが、
当方で起動をしかけていたのは別のrubyプログラム(プロセス監視)で、ruby3.1にした際に
net-smtpなどをGemfileで指定しなければならなくなり、それによって起動しようとしたrai

元記事を表示

【随時更新】Railsでの開発時に入れたいgem集

## これはなに
Railsでの開発が捗るよっていうgemをまとめたものです。

みなさんのおすすめのgemがあれば教えていただけると嬉しいです!!

___

#### デバッグ
– [better_erros](https://github.com/BetterErrors/better_errors#installation)
– [binding_of_caller](https://github.com/banister/binding_of_caller)
– [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug#installation)

#### テスト
– [rspec-rails](https://github.com/rspec/rspec-rails#installation)
– [factory_bot_rails](https://github.com/thoughtbot/factory_bot_rails)
– [faker](https://github.com/faker-ruby

元記事を表示

Railsでの画像の保存場所

# はじめに

#### ※以下の内容には誤りが含まれる可能性があります

Railsでアプリケーションを作っていて、トップページの画像や背景画像を配置する際、
私がやったことを書きます。

# 具体的な内容

画像は「public」フォルダに配置しておくと、や「background-image:url(“/画像名”);」のよう

に、画像名を指定するだけで、簡単に画像を表示できます。

“`
public/
├─ top.jpg
├─ rails.phg
└─────── 画像はpublicフォルダの中に置く
“`

__ビューファイル(views/home/about.html.erb)__
“`about.html.erb

“`

__cssファイル(assets/stylesheets/home.scss)__
“`home.scss
background-image: url(“/top.jp

元記事を表示

Rails7でdata: { turbo_method: :delete }が効かなかったときの解決法

初歩的な内容かもしれませんが、備忘録として残しておきます。

前提として以下のgemがインストールされていること。
“`
gem “importmap-rails”

gem “turbo-rails”

gem “stimulus-rails”
“`

インストールが済んでいたら
“`
$ rails importmap:install
“`
“`
$ rails turbo:install stimulus:install
“`

以上のコマンドを実行することで無事deleteメソッドが使用できるようになりました。

その際以下のファイルは初期化されるので既に存在&記述してある場合は注意が必要です。
app/javascript/application.js
config/importmap.rb

元記事を表示

validatesのエラーメッセージを表示する仕組み

## 環境
Rails 5.2

## 内容

validatesのチェックで引っかかった場合、どのような仕組みでエラーが表示されているのか、確認してみました。

userモデルには、**name**と**name_id**の2つのカラムがあり、次のようにvalidatesチェックをかけています。
“`user.rb
validates :name, presence: true
validates :name_id, presence: true, uniqueness: true
“`

editで編集画面を表示して、**name**を空白にし、**name_id**に重複したデータを入力して、更新ボタンを押します。すると、コントローラの**update**メソッドに入ります。validatesのチェックは、**@user.update**が実行されるタイミングで行われます。validatesのチェックで引っかかった場合、**@user.update**の戻り値が**false**で返ってくるため、if文のelseに入ります。**flash**には「更新が失敗しました。」

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事