Rails関連のことを調べてみた

Rails関連のことを調べてみた
目次

swiperの導入を整理してみた

## はじめに
Swiperの公式ドキュメントをみてみてもいまいち「?」だったため、GPTやほかのサイトを回ってみて私なりにまとめたものをお伝えしたいと思います。

https://swiperjs.com/get-started

## Swiper名前の由来
読んで字のごとく、「Swipe」からきています。
日本語に訳すと「指でなぞる」。スマートフォンやタブレットでのスワイプ操作を前提に設計されているため、この名前が付けられたと考えられています。

![スワイプ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777936/06582699-c5a7-9889-7c97-955e88a0f67d.jpeg)

## Swiperとは
スライドショーが作れるJavaScriptのプラグインです。
他にスライドショーが作れるプラグインには「slick」があります。
slickはjQueryに依存するプラグインですが、SwiperはjQueryに依存しないプラグインなので、SwiperはjQueryを読み

元記事を表示

DaisyUIのコンパイルで苦戦した話[Rails7]

# はじめに
初めまして、現在プログラミングスクールにてRuby on Railsをメインに学習しているikedaと申します。
アプリ制作時にプリコンパイルを忘れて苦戦したのでその備忘録としてまとめようと思います。
初めて記事を書くのでお手柔らかにお願いします。

# 使用技術
Rails 7.0.8.1
Ruby 3.1.2
docker
Tailwindcss
DaisyUI

# [daisyUI](https://daisyui.com/?lang=jp)とは何か
Tailwind CSSをベースとしたコンポーネントライブラリで、わかりやすく言うとTailwind CSSを更に使いやすくするためのもの
### [Tailwind css](https://tailwindcss.com/)とは
ユーティリティファーストのCSSフレームワークのこと

# やりたかったこと
daisyUIのコンポーネントにあるチェックボックスを導入したかった。

# 問題

daisyUIのコンポーネントのチェックボックスを導入したら色が反映されなかった。

# 試したこと
`docker co

元記事を表示

ローカルからRenderにデプロイする際出やすいエラーについて

### はじめに
今回はローカルでrailsで環境構築した後、Renderにてデプロイする際によく起きるエラーと対処法を備忘録としてまとめてみます

## 事象
ローカル環境でrailsチュートリアルを学習中、1章で最初のデプロイをRenderにする際にエラーが発生

## エラー内容
“`
`validate_platforms!’: Your bundle only supports platforms [“x64-mingw-ucrt”]
but your local platform is x86_64-linux. Add the current platform to the lockfile
with (Bundler::ProductionError)
“`

## 原因
bundlerが実行できるプラットフォームが制限されている。ローカルでRailsアプリを作成すると、bundlerが実行できるプラットフォームはRailsを実行した環境OSのみとなるらしい。今回はWindowsでbundle installしたためWindowsOSのみの環境になっている。その

元記事を表示

Railsでポリモーフィック関連付けを使用した柔軟なモデル関連付けの実装」

## はじめに
アプリ制作の過程で、ポリモーフィック関連を用いた実装を行いました。ここではその実装過程で得られた気づきをまとめます。ポリモーフィック関連について実際の例を交えながらなるべく分かりやすくまとめたいと思います。

## なぜポリモーフィック関連付けが便利なのか
例えば、ブログ記事にコメントを付ける機能を作ったとします。その後、イベントページにもコメントを付けたくなったとします。通常であれば、新しくコードを書き足さないといけないと思います。しかし、ポリモーフィック関連付けを使うと、既存のコードをほとんど変更せずに、イベントにもコメントを付けられるようになります。
それでは、実際にコードを見ていきましょう。

## モデルの設定
まず、モデルの設定から。`Article`、`Event`、`Comment`の3つのモデルを作ります。
“`ruby
class Article < ApplicationRecord has_many :comments, as: :commentable end class Event < ApplicationRecord has

元記事を表示

【Rails】You need to supply at least one validation エラーが発生したら

## 概要

Rails アプリでフォームデータを送信するとき、以下のようなエラーが発生しました。

“`
You need to supply at least one validation
“`

## 原因

このエラーは以下のように `validates` メソッドにバリデーションの内容が指定されないと発生します。

“`rb
class Profile < ApplicationRecord validates :user_id end ``` ## 対処法 このエラーを解決するためには `validates` メソッドに適切なバリデーションを指定します。例えば `user_id` が一意であることを検証するために `uniqueness: true` オプションを指定できます。以下のようにすると、エラーは解消されます。 ```rb class Profile < ApplicationRecord validates :user_id, uniqueness: true end ``` ## まとめ `validates` メソッドを使用する際は、バ

元記事を表示

【ActiveRecord】length vs size

# 目的
**ActiveRecord**の`length`と`size`について、しっかり理解した上で適切に使いこなせるようにする。
#### 補足
本記事は、レコード数の取得においてSQL文の発行数を抑えることの出来る`length`と`size`にフォーカスしています。
※`count`メソッドは、必ずSQL文を発行するため割愛(比較用で一部記載あり)

# ActiveRecordのlengthとsizeの違い

## `#size`
https://github.com/rails/rails/blob/main/activerecord/lib/active_record/relation.rb#L345-L352
“`rb:rails/activerecord/lib/active_record/relation.rb
# Returns size of the records.
def size
if loaded?
records.length
else
count(:all)
end
end
“`
:::note
– Loadされて

元記事を表示

[Rails] rspec_{ } と () の使い方

# はじめに
rspecでテストを実装していて、以下の箇所で詰まりました…。

“`rb
# NG
expect(subject).to raise_error(RuntimeError, ‘testだよ’)

# RuntimeError:
# testだよ

# OK
expect{ subject }.to raise_error(RuntimeError, ‘testだよ’)
“`

`{}`と`()`の違いだけなのに、テストが成功するか変わりました。
挙動が違うと思い、調べた内容をアウトプットいたします。

# `( )`
仮に、上記のコードで例を挙げます。

– `subject`を評価され、`subject`の結果を`expect`メソッドに渡します
– なので、`subject`を実行した内容で例外があれば、そこで処理が止まります
– テストもエラーになります

流れの結果として、どんな値が返ってきたのかをテストするには、すごく向いています。

# `{ }`
`{…}`で記載したコードは、コードブロックとして評価され、「後で実行される」ことを

元記事を表示

Railsで共通パーツの一部をページごとに変更する方法

## はじめに

アプリ制作の過程で、ヘッダーの一部を特定のページで戻るボタンに変更するという実装を行いました。
ここではその実装過程で得られた気づきをまとめます。

## 本記事の内容
Railsで共通パーツとして使っているものの一部分を特定のページで変更する方法。

## ヘッダーのView
“`ruby:_header.html.erb

元記事を表示

【個人開発】服用管理をする介護者向けのアプリ「medicine-checker」を開発しました【Rails】

# はじめに
初めまして、現在プログラミングスクールにてRuby on Railsをメインに学習している[ikeda](https://qiita.com/orudasulife)と申します。
7/2にアプリをリリースしたので、アプリ紹介と技術、感想をまとめさせていただきます。
初めて記事を書くのでお手柔らかにお願いします。

### サービスURL
https://medicine-checker.com

### GitHub URL

https://github.com/ikedaatusi/medicine-checker

# 開発背景

このサービスを作りたいと思ったきっかけは、私の父親が薬の服用管理が苦手で、薬を飲み忘れることが多かったからです。その結果、何度か救急車で病院に運ばれる事態にもなりました。この問題を解決したいと思い、薬の服用管理をアプリで行うことで、父親のように薬の服用を忘れるがちな人々の健康を守りたいと考えました。

# 機能・アプリ紹介

[![Image from Gyazo](https://i.gyazo.com/55909d76ffc23789

元記事を表示

ラジオボタンの由来、ウェブ関係あるの?

## はじめに
今回はラジオボタンについて少し学習したので、ラジオボタンの実装の流れ、を紹介しようと思いましたが、少しずれて、由来の話。
「なぜにラジオボタン?ラジオ要素はどこ?ウェブと関係あるの?」と疑問に思ったので、紹介したいと思います。

## ラジオボタンとは
![ラジオボタン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777936/b2ffa09b-475a-2bef-37bc-6f5a30a5e26e.jpeg)

スマートフォン主流の昨今、ラジオ放送がどこでも手軽に聴けるようになり、**ボタンを押す**という動作がなくなりましたね。
アーカイブも無料で1週間残っているのは大変うれしく思う世代です。

昔は今ではもしかしたら考えられない方もいると思いますが、放送局ごとに割り振られたボタンがいくつも並んでいて、あるボタンを押して選曲すると、押されていた他のボタンが元に戻るという仕組みになっていたそうです。
で、このような仕様のボタンを**ラジオボタン**と呼ぶようになったそうです。

元記事を表示

【Rails】bundle installでGemのインストールはしているのにコンテナやEB環境で認識されない時の対処法

どうもこんにちは。

今回は、タイトルに記載した件について対処したので備忘録として記事にします。

# 環境

Ruby 3.2.2
Rails 7.1.3.3
EB環境 Ruby 3.2 running on 64bit Amazon Linux 2023/4.0.7

# どんなエラーが出ていた?

エラーログをそのまま貼り付けてしまいますが、`Could not find sassc-2.1.0 in locally installed gems (Bundler::GemNotFound)`という部分でどんなエラーかが確認できます。

“`
bundler: failed to load command: rake (/var/app/staging/vendor/bundle/ruby/3.2.0/bin/rake)
/usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/definition.rb:524:in `materialize’: Could not find sassc-2.1.0 in locally

元記事を表示

【個人開発】旅行やデートのプランを共有するSNS「Go out Planning」を作成しました

# はじめに

![go_out_plannin_header_logo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/f3c0ab6f-8ce7-9888-4c21-f36ea3a3bfb9.jpeg)

はじめまして3rararaと申します!

今回は旅行やデートのプランを共有するSNS「Go out Planning」を作成したため、
記事にまとめておこうと思います

これからポートフォリオを作成しようと考えている方などの一例として、作成の一助となれば幸いです!

AI機能などまだまだ機能を追加予定ですので、その度に記事もアップデートできたらと考えています!✨

【サイトURL】

https://go-out-planning.net

【Github URL】

https://github.com/3rarara/go_out_planning

本記事では、「Go out Planning」の概要やこだわりポイント、
苦労した点などについて書いていきます!
機能の実装につ

元記事を表示

[Rails]あ…ありのまま、今起こった事を話すぜ!「おれはorder(created_at: :asc)と実装したと思ったら、created_at descのSQLが実行されていた」

な… 何を言っているのかわからねーと思うが
おれも 何をされたのか わからなかった…

頭がどうにかなりそうだった…
[reverse_order](https://railsdoc.com/page/model_reverse_order)をチェーンしていただとか超スピードだとか
そんなチャチなもんじゃあ断じてねえ

もっと恐ろしいものの片鱗を味わったぜ…

ということで、前置きはここまでにして実際に私が体験した話です。

タイトルの通り`order(created_at: :asc)`と実装したのに、SQLは`created_at desc`と実行される実装について説明します。

ここまでの話だけで、パッと実装が思い浮かぶ方はActiveRecordマスターだと思います…!
私は10年弱Rails触っていますが、初めて気づきましたw

## 実装

わかってしまえば、やり方は簡単です。
Userというモデルがある場合、下記実装では発行されるSQLのorderは逆になります。

“`ruby
User.order(created_at: :asc).last
“`

`

元記事を表示

大量発生していたスパム登録を防ぐことができたreCAPTCHAを紹介

サービスを運用していると、スパムによるユーザー登録に遭遇することがあります。
一度ならまだしも、頻繁にスパム登録をされてしまうと不要なデータが大量に発生してしまいます。

もし、スパム登録にお悩みであればGoogleが提供している[reCAPTCHA](https://cloud.google.com/security/products/recaptcha?hl=ja)の導入をおすすめします。

以前、大量のスパム登録に困ったいたところreCAPTCHAを導入してから途絶えたので、かなり有効なのではないかと思っています。

# reCAPTCHAとは

reCAPTCHAは、悪質なボットなどによるWebフォームからの送信を防ぐ機能です。

年々、ボットもreCAPTCHAの制限を突破するために進化してきているため、reCAPTCHAもバージョンが更新されています。
本記事投稿時点では、v3が出ています。

## v1

v1は歪んだ文字列をユーザーに提示し、入力したものが正解しているかを判定するものです。
現在はボットの画像認識精度が向上し、突破されるようになったため非公開となっていま

元記事を表示

rspecのtravel_toって便利

## はじめに
最近、rspecでtravel_toを使いテストを書きました。
使ってみて便利だなと思ったので共有します。

## travel_toとは
ActiveSupport::Testing::TimeHelpersのtravel_toメソッドです。

https://api.rubyonrails.org/classes/ActiveSupport/Testing/TimeHelpers.html

travel_toはある時刻を渡してあげれば、その時刻についてのテストを実装することができます。
実際にやってみたいと思います。

## travel_toのテスト例
travel.rbというmodelでcurrent_yearというメソッドを定義します。
これは単純に現在の時刻の年を返すメソッドです。
“`rb:app>models>travel.rb
class Travel < ApplicationRecord def self.current_year Time.zone.today.year end end ``` rails_helper.rb

元記事を表示

ネストしたルーティングの_pathヘルパーについて

## 読んで欲しい人
– `link_to post_edit_path(@post, @hoge)`でなんで2つ引数を入れているかわからん人へ
– 過去の自分

## 動作環境
– ruby 3.3.0
– Rails 7.1.3.3

## pathヘルパーとは
– URLを生成するための便利なヘルパー

こんなルーティングがあったら
“`ruby:routes.rb
resources :posts
“`

下記のようにURLを生成してくれる

– `posts_path`→/posts
– `new_post_path`→/posts/new
– `edit_post_path(:id)`→/posts/:id/edit
– `post_path(:id)`→/posts/:id

今回メインに扱うのは下記

– `edit_post_path(:id)`→/posts/:id/edit
– `post_path(:id)`→/posts/:id

基本的に、ビューやコントローラに`edit_post_path(@posts)`という使い方をする。
引数を指定して、リンク

元記事を表示

【Rails】saveメソッドとcreateメソッドの使い分け

## はじめに
データ保存などで使用する`save`メソッド・`create`メソッドをどういう使い分けをしたら良いかに悩んだので、
勉強がてら使い分けについてまとめました。

## saveメソッドの使用場面
`save`メソッドは以下のように使用します。
“`ruby:
user = User.new(name: ‘taro’, age: 18) #インスタンス生成
user.save #生成したインスタンスの保存
“`
`save`メソッドの戻り値は`true`か`false`です。
実行結果によって分岐をさせたい場合などは、`save`メソッドが使用できます。

## createメソッドの使用場面
`create`メソッドは以下のように使用します。
“`ruby:
user.create(name: ‘taro’, age: 18) #インスタンス生成+保存
“`

`create`メソッドは`new`と`save`を一度に実行してくれます。
しかし、createはインスタンスを戻り値として返すため、登録に成功したかどうかの判定には使用できません。

## まとめ

元記事を表示

簡単に rails API を実装してみた

# Docker

参考

https://zenn.dev/trysmr/articles/b9c99302ebc205

本記事では、web コンテナのポートを 80:3000 で実装している

# rails API 実装

## cors 設定

`Gemfile`

“`ruby_diff
+ gem ‘rack-cors’
“`

`config/initializers/cors.rb`

“`ruby
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ‘http://localhost:3000’

resource ‘*’,
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
“`

## ログイン機能実装

devise を使用する

### ライブラリインストール

`Gem

元記事を表示

論理否定の`!`と`nil?`メソッドを組み合わして使った際のメモ

# やろうとしたこと
– 条件分岐をさせるにあたって boolean で結果を取得したかった
– 「オブジェクトが nil なら false を返してほしい」という目的
– `nil?`は「nil なら true を返す」ので論理否定と組み合わせた

▲しかし、論理否定`!`をと`nil?`を組み合わせて使うと自分が想定している結果が返ってこない

以下にサンプルを示す
“`:ソースコード
p (“aaa”)
p !(“aaa”)
p (nil)
p !(nil)
p (“———-“)
p (“aaa”).nil? #【1】
p !(“aaa”).nil? #【2】
p !((“aaa”).nil?) #【3】
p (“##########”)
p (nil).nil? #【4】
p !(nil).nil? #【5】
p !((nil).nil?) #【6】
“`

“`:実行結果
“aaa”
false
“———-”
false #【1】
true #【2】
true #【3】
“###

元記事を表示

OTHERカテゴリの最新記事