- 1. [Rails] Capistranoが不要なので、削除する
- 2. Railsで検索機能実装に役立つおすすめ記事一覧(Ransack)
- 3. ブラウザタブの左上のアイコンを指定する
- 4. ホーム画面に追加でアイコンを指定する apple-touch-icon
- 5. 未読通知カウント アイコンバッチ
- 6. RSpecでよく使うメソッド集(備忘録)
- 7. Rubyで英語名称のポケモンの名前を日本語で当てるゲームを作ったよ
- 8. Ruby on Rails ECサイト作成
- 9. assert_raise(ActiveRecord::RecordNotFound)で沼った件
- 10. Hunter×Hunter キャラクターリスト
- 11. data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合
- 12. 「コメントに対するコメント」をモデルで表現してみた!
- 13. テストコードを書く上で個人的に気をつけている5つのこと
- 14. Railsでのユーザー認証の実装とbcryptの活用方法
- 15. [Ruby 3.1.6] メソッドの可変長引数の *array 展開で SystemStackError
- 16. Rails – 全てのエラーを rescue_from で吸収する例
- 17. [bootstrap5]本番環境でドロップダウンが動かない問題(TypeError: t.createPopper is not a function)
- 18. Rubyで配列内のハッシュで同じキーの値を合算(inject、merge)
- 19. CORS設定でOPTIONSリクエストとヘッダが取得できない
- 20. 【Rails】debrideで未使用のメソッドを検出する方法
[Rails] Capistranoが不要なので、削除する
# はじめに
元々、`Capistrano`を使用してデプロイをしていたみたいですが、デプロイ方法が変わって、使用されなくなっていました。なので、調査をした上で、削除する方針に決まりました。
その内容をアウトプットいたします。:::note warn
本記事では、削除をメインに記載いたします。
Capistranoについて詳しく知りたい方や実装方法は、別記事を参照していただくようお願いいたします。
:::# Capistrano とは
https://github.com/capistrano/capistrano簡単にいうと、デプロイを自動化してくれるGemになります。
詳しくは、以下の記事がわかりやすかったです。https://pikawaka.com/rails/capistrano
# 確認方法
まず、本当に`Capistrano`を使用していないか、確認します。
デプロイに使用する実行コマンドは、以下のようになると思うので、リポジトリ内・外を調査します。“`sh
bundle exec cap production deploy
“`使われ
Railsで検索機能実装に役立つおすすめ記事一覧(Ransack)
# RailsアプリケーションでRansackを使用して検索機能を実装する際に参考にした記事をまとめました。
## 1. [activerecord-hackery/ransack (GitHub)](https://github.com/activerecord-hackery/ransack)
Ransackの公式リポジトリです。まずはこれを見てみるといいと思います。## 2. [Ransackを使った検索機能の実装(Qiita)](https://qiita.com/nojinoji/items/e1b174220da8c81a1756)
Qiitaユーザーによる実際の使用例が紹介されています。具体的なコード例が豊富です。## 3. [Ransackの基本的な使い方(Pikawaka)](https://pikawaka.com/rails/ransack)
基本的な使い方や設定方法が分かりやすくまとめられており、読みやすい。## 4. [Rails7とRansackでのインスタント検索機能(プログ)](https://plog.kobacchi.com/rails
ブラウザタブの左上のアイコンを指定する
# はじめに
ポートフォリオ作成一旦終わりました!
ブラウザタブの左上のアイコンってどうやって指定するんだ?
となり実装まで漕ぎ着けたのでアウトプットしておきます✍️# 完成図
![スクリーンショット 2024-06-27 23.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/2699962e-16fb-9407-d2e4-40665297cb2d.png)
# 簡単!
指定したい画像を用意し、拡張子.icoになるよう変換します(ico変換など検索すると変換サイトが出てきます)
適当な変換サイトでOK!application.html.erbのhead内に以下を記述します
“`application.html.erb
<%= favicon_link_tag('GoOutPlanning.ico') %>
“`あとは該当の画像をapp/assets/imageに格納するだけ!
# さいごに
ぜひやってみてください!
ホーム画面に追加でアイコンを指定する apple-touch-icon
# はじめに
ポートフォリオ作成一旦終わりました!
iphoneでホーム画面追加するときのアイコンってどうやって指定するんだ?
となり実装まで漕ぎ着けたのでアウトプットしておきます✍️# 完成図
![IMG_6629.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/4586b9b3-5d0e-56a8-58b1-41cf71dff402.jpeg)
# 簡単!
指定したい画像を用意し、サイズを180×180にリサイズしておきます
適当な変換サイトでOK!application.html.erbのhead内に以下を記述します
“`application.html.erb
<%= favicon_link_tag 'apple-touch-icon.png', rel: 'apple-touch-icon', type: 'image/png' %>
“`あとは該当の画像をapp/assets/imageに格納するだけ!
# さいごに
未読通知カウント アイコンバッチ
# はじめに
ポートフォリオ制作やっと一旦製作終えました!
今回は通知の未読カウントとDMの未読カウントを実装しました!
未読がある場合はアイコンバッチがつくようにしています
アウトプットとしてまとめます※旅行やデートのプランを共有するアプリなので、
投稿機能はPostではなくPlanを使用しています!通知機能の実装方法については、下記に記載しています
https://qiita.com/3rarara/items/1e18838a9fdb22dd535a
# 完成物
![スクリーンショット 2024-06-27 22.20.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/1580f956-5cae-42f6-eb72-8bf79ad90d2b.png)
# コントローラー
どの画面でもバッチをつけるために、application_controller.rbに記述します“`application_controller.rb
class ApplicationCo
RSpecでよく使うメソッド集(備忘録)
RSpecの検証に使うメソッドを忘れがちなので、アウトプットしてみるようにしました。
他にもよく使うけど、忘れるようなメソッドがあれば、どんどん残していきます!## pageの中に、文字列があるかどうかを判断するマッチャ
“`ruby
expect(page).to have_content(‘テキスト’)
“`## 現在のページが指定したページかどうかを判断するマッチャ
“`ruby
expect(page).to have_current_path(path)
“`## 指定した範囲の中で検証を行う
“`ruby
within(‘.class’) do
# expect(page).to have_content(‘テキスト’)
end
“`
Rubyで英語名称のポケモンの名前を日本語で当てるゲームを作ったよ
### 読んで欲しい人
– rubyでプログラムを作ってみたい人
– 過去の自分### 動作環境
– ruby 3.3.3
### アプリについて
#### ファイル構造
“`ファイル構成
.
├── pokemon.rb
├── pokemon.csv
“`#### ソースコード
“`ruby:pokemon.rb
# ファイル内でcsvライブラリ(モジュール)を使用するための記述
require ‘csv’# CSVファイルを読み込む
def load_pokemon_from_csv(file_path)
pokemon_data = []
# foreachにheaders: trueをすると、keyとvalueをいい感じに扱ってくれる
CSV.foreach(file_path, headers: true).each_with_index do |row, _i|
pokemon_data << row.to_hash break if _i == 150 end pokemon_data end def ma
Ruby on Rails ECサイト作成
## はじめに
Zennの記事を元にECサイトを作成してみました。
今回はオリジナルではありませんが今後ECサイトを作りたいので練習で制作しました。とても勉強になったのでECサイトを作ってみたい方はぜひチャックしてみてください。https://zenn.dev/farstep/books/7f169cdc597ada
## 機能紹介
大きく2つに分けることができます。
・ECサイトの管理者側の機能
・ECサイトを利用する顧客側の機能どちらもログインすることで閲覧できます。
Githubリポジトリ
https://github.com/Killua0615/ecommerce_practice
### 管理者側以下の内容が確認できます
#### 注文履歴
status は「Normal」「Withdrawn」「Banned」のどれかに変更することができる
![スクリーンショット 2024-06-27 10.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/7fe7
assert_raise(ActiveRecord::RecordNotFound)で沼った件
# きっかけ
`ActiveRecord::RecordNotFound`を発生させるテストケースがなぜか失敗し、沼ってしまいました。
原因がわからなくて気持ち悪かったので色々と調査してみました。# やりたいテスト
以下のように、staffsテーブルから対象の`staff_id`を持つレコードを取得するアクションを考えます。
`find`メソッドを使用しているため、テーブルにレコードが存在しない場合は`ActiveRecord::RecordNotFound`が発生します。“`ruby
class ProfilesController# get profiles_show_path(:person_id)で実行されるアクション
def show
@staff = Staff.find(params[:person_id])
endend
“`この時、例外が発生していることをテストするケースを考えます。
`assert_raise`を使用して以下のように書いてみました。“`ruby
test ‘対象のstaf
Hunter×Hunter キャラクターリスト
## はじめまして
オランダでコンピューターサイエンスのブートキャンプに参加したのをきっかけにエンジニアに興味を持ち、現在は独学でRuby on Railsの学習しています。
パーフェクトRuby on Railsという参考書を一通り学習したので、大好きなHunter×Hunterのキャラクターリストを作りました。## キャラクターリストの紹介
### トップページ
今まで登場したキャラクターの一覧が表示される![スクリーンショット 2024-06-26 20.46.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/3aa66941-8fea-a4df-5256-89cb2fd35dfa.png)
画像をクリックすると各キャラクターの詳細が表示される
![スクリーンショット 2024-06-26 21.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/0d4b8759-
data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合
## はじめに
data-turbo=”false”とdata: { turbo_method: :post }をどうしても一緒に使う必要があった時の話です。※後述しますが、ajax化した場合ですと今回の書き方ではうまくいきません。予めご了承ください。
## 環境
ruby 3.2.2rails 7.1.3.2
hotwire
Bootstrap5系
Google Map API
## 今回例示するアプリ画面についての説明
現在、「自分の好きな本屋を紹介し、また好きな本屋が増える事を支えるサービス」がテーマのポートフォリオを作成中です。
今回は開発途中で壁に当たった時の対処法としてここに記していきたいと思います。
## 今回のシチュエーション
ブックマークボタン(画像にある栞のマーク)を押すたびに、javascriptが読み込めなくなりGoogleMapが表示されなくなりました。
![turboメソッドの記事写真1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372657
「コメントに対するコメント」をモデルで表現してみた!
## 動作環境
vscode、ruby3.3.0、rails7.1.3.4## 実装したかったこと
x(旧twitter)のようなクローンアプリを作っていたのですが、投稿文に対するコメントに対して更にコメントする機能を実装してみました。
探せば山ほど参考になる記事は出てくると思ったのですが、今回は自分のテーブルや関係性の理解度を確認するために、敢えて自分で試行錯誤しながら一から作ってみました!💪## 実装のゴール
コメントの子要素を取得できる。
コメントの3階層まで。4階層目のコメントは作成できない。(コメントのコメントのコメントまでは作成できる)## 実装前のモデルの状態
user→post→comment
(既にpostへのコメント機能は作成済みです)
“`app/models/user.rb
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy
“`
“`app/models/post.rb
belongs_to :user
has_many :comments,
テストコードを書く上で個人的に気をつけている5つのこと
# はじめに
エンジニアの皆様、テストコードはちゃんと書けておりますでしょうか?(挨拶)どんな開発言語や開発手法を導入していたとしても、アプリケーションの機能実装とテストは表裏一体であると言えます。場合によっては機能の作り込みよりも時間をかけるべきケースが多いくらい重要である(・・・と信じたい)反面、デッドラインが近づくにつれて真っ先に工数が削られやすく軽視されがちな工程でもあります。
時間に追われてテストコードを書いた結果、テストの体をなしていないコードになっていたり後で見返したときに記述が煩雑すぎてメンテ不能になっていたり・・・といった苦い経験は誰しもがあるかと思います。かくいう自分もそんなことは多々ありました。
そんな今までの経験則を基に「自分がテストコードを書くにあたってどんなことを意識しているのか?」をいくつかピックアップして備忘録も兼ねて紹介したいと思います。一応注意なのですが、**「あくまで自分はこうやってます」という趣旨の記事**です。偉大な先人によるテストコードの書き方などに関する記事・コラムも多数ありそれらの内容に相反する事項もあるかもしれませんが、そこは
Railsでのユーザー認証の実装とbcryptの活用方法
## 流れ
### 1. Userのモデルとコントローラーを準備する
“`ruby
rails g model user username:string password_digest:string
“`“`ruby
rails g controller users
“`“`ruby
rails db:migrate
“`以下のファイルが生成されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/b76bc216-0e70-8824-13e6-2aa70659953d.png)`users_controller.rb`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/38a56c5c-bb43-6430-b46c-4720f1c0165c.png)
`user.rb``user.rb` に以下のメソッドを追加します:
[Ruby 3.1.6] メソッドの可変長引数の *array 展開で SystemStackError
[SystemStackError]:https://docs.ruby-lang.org/ja/latest/class/SystemStackError.html
[ArgumentError]:https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html
[NoMethodError]:https://docs.ruby-lang.org/ja/latest/class/NoMethodError.html
[組み込みライブラリ]:https://docs.ruby-lang.org/ja/latest/library/_builtin.html
[Hash#values_at]:https://docs.ruby-lang.org/ja/latest/method/Hash/i/values_at.html
[ruby 3.3 – ruby/hash.c L:2710]:https://github.com/ruby/ruby/blob/ruby_3_3/hash.c#L2710:::note warn
この記
Rails – 全てのエラーを rescue_from で吸収する例
# コード例
StandardError を rescue_from することで、全てのエラーを巻き取れそうだ
“`rb
class ExampleController < ApplicationController rescue_from StandardError do render status: :ok end def index raise ActiveRecord::RecordInvalid end end ``` # 備考 たとえば `ActiveRecord::RecordInvalid` の祖先を見ると、次のようになっているが、この中の親のどれかを rescue_from しておけばエラーを巻き取れるということのような気がする ( たぶん ) ただしもちろんエラークラス以外を rescue_from してしまうのは宜しくないだろう ```rb ActiveRecord::RecordInvalid.ancestors # [ # ActiveRecord::RecordInvalid, # ActiveRecor
[bootstrap5]本番環境でドロップダウンが動かない問題(TypeError: t.createPopper is not a function)
## 目的
Rails7でwebアプリを開発している際に開発環境でbootstrap5を使用してました。本番環境にデプロイしてみるとドロップダウンの機能が動かなかったので
その問題解決時に得た情報を備忘録として残します。Rails7にbootstrap5を導入する記事がネット上に多くありましたが
どれも自分の環境では動かなかったので自分と同じように困っている方の役に立てれば幸いです。## 開発環境
Rails 7.0.4.3
ruby 3.1.4
bootstrap 5.3.3## 動かなかった時の状態
前に[こちら](https://qiita.com/ruby_of_pokemon/items/2a5452bcd5db0d12a230)の記事でPopper.jsのエラー解決方法を紹介したのですが、開発環境では問題なく動いていました。
しかし、いざ本番環境にデプロイするとbootstrapのドロップダウンが動きませんでした。ちなみに本番環境でドロップダウンを押した際にブラウザのコンソールで出たエラーがこちらになります。
![スクリーンショット 2024
Rubyで配列内のハッシュで同じキーの値を合算(inject、merge)
ポートフォリオ作成中に、「同一のキーを合算して、値を求める」必要があり、実装に時間を要したため、備忘録として投稿します。
## 実現したいこと
“`ruby
data = [
{ water: 9, retort_food: 3, mask: 3 },
{ water: 10, retort_food: 4, mask: 4 },
{ water: 11, retort_food: 5, mask: 5 }
]# 上記のデータで同じキーのものを合算
# data = { water: 30, retort_food: 12, mask: 12 }
“`## 完成形
“`
merge_data = data.inject do |old_data, new_data|
old_data.merge(new_data) do |_key, old_val, new_val|
old_val + new_val
end
end
“`
## 使用したメソッド### inject
> 配列等の要素を一つずつ繰り返して、ブロック内で処理する
CORS設定でOPTIONSリクエストとヘッダが取得できない
実装中に対応した内容を備忘録として投稿します。
## 発生した問題
フロントエンド(Nuxt.js)から、バックエンド(Rails)に対して、APIリクエストを投げるとCORSエラーが発生。
“`
Access to XMLHttpRequest at ‘http://localhost:3000/users/1’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`
## 原因– ブラウザ側のセキュリティが強化されていて、意図しない挙動を防ぐために実装されている。
– もし仮に、ハッキングされるなどすると、
– フロントエンドとバックエンドでサーバーやドメインが別れている場合に、悪意のあるドメインにすり替えるなどができてしまう。
– 会員制サイトでログインするときに、ログインIDやパスワードを盗むことができてしまう。
–
【Rails】debrideで未使用のメソッドを検出する方法
debrideというGemを使用することで未使用の可能性のあるメソッドを検出できます。
https://github.com/seattlerb/debride?tab=readme-ov-file
## 導入方法
Gemfileに以下を追記し、`bundle install`します。“`Gemfile:Gemfile
group :development do
gem “debride”, “~> 1.12”, require: false
end
“`ターミナルで以下のコマンドを実行し、ホワイトリストを作成します。
“`terminal
$ rails routes > routes.txt
$ debride_rails_whitelist routes.txt log/production.log | sort -u > whitelist.txt
$ echo up >> whitelist.txt
$ echo down >> whitelist.txt
$ echo change >> whitelist.txt
$ bundle exec deb