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

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

Railsの非同期いいねの方法

今回はRailsの非同期いいねの方法について紹介します。

参考記事
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/b583e5
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/6d1551

### 同期いいねの作成
参考記事では、postとuserの紐付けになっていますが、自分はrecruitmentとuserの紐付けになります。
最初にmodelを作成して、マイグレイトを行います。
“`ruby
rails g model Favorite user_id:integer recruitment_id:integer
rails db:migrate
“`
次にアソーシエーションの設定をします。

“`ruby
#models/user.rb

class User < ApplicationRecord #〜省略〜 has_many :favorites, dependent: :destroy end ``` ```ruby #m

元記事を表示

【個人開発】「ロードバイク乗りのためのお店検索WEBアプリ」制作しました【Cycle Depot】

# 本記事の対象者
– 個人開発アプリ、オリジナルアプリ開発に興味がある方
– ロードバイクが趣味の方
– タイトルに興味を惹かれた方

# WEBアプリURL
https://cycledepot.herokuapp.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668589/7e0520e9-bcd0-f6e0-d481-a06cd54868fe.png)

# オリジナルアプリ概要
– 名称: Cycle Depot(「サイクルデポ」と読みます)
– 開発環境:
– Ruby3.0.1
– Rails6.0.5.1
– PostgreSQL1
– 説明:
ロードバイクに乗っていて気軽に入れるお店が中々見つからないなと感じたことはありませんか?
  ロードバイクは高価であるということに加えて、スタンドが付いておらず自立しないため駐輪場所に困ることが多いと思います。そんな時にサイクルラックを置いてくれているお

元記事を表示

Rails6で通知機能を実装(ポリモーフィック)

Railsで通知機能を実装した際にポリモーフィックの存在を初めて知ったのとあまり記事がなかったので参考になればと思い書いていきます

理解が間違っているかもしれません。何かあればコメントお願いします。

また、下記の記事を参考にして実装を行いました。かなり重複する内容があります。この記事はそのままではできなかったところの修正と、実装で疑問に思ったことを書いてあります。考えながら実装したい方は下記の記事から見るといいかもしれません。

https://qiita.com/sazumy/items/479cb14cfea77c7429bd

## 今回作成するサンプル
![通知機能.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821961/af6b81a6-9079-2136-feb8-8bbb1d925f2f.gif)

今回通知用のページを作って実装しました
この記事ではviewは簡単な部分しか書いていません

## バージョン
rails 6.1
ruby 3.1.2

## 前提
下記ができ

元記事を表示

bcrypt_ext.bundleインストール時にmach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))のエラー発生

# 事象
アプリの動作確認時に、エラー画面が表示され、ターミナルに以下のエラーが表示された。
“`
dlopen(/Users/arakijun/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bcrypt-3.1.18/lib/bcrypt_ext.bundle, 0x0009): tried:

‘/Users/arakijun/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bcrypt-3.1.18/lib/bcrypt_ext.bundle’ (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) –

/Users/arakijun/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bcrypt-3.1.18/lib/bcrypt_ext.bundle
“`
`bcrypt_ext.bundle`の`x86_64`がインストー

元記事を表示

【初・個人開発】公園検索コミュニティアプリ 「COMO(コモ)」 作りました

# はじめに
こんにちは、ご覧いただきありがとうございます。@Rei33_Qiitaと申します。
このアプリは、私の実体験とママ友からの意見を元に、子供と公園に遊びに行く前にしている、「ある」ことを時短できたらいいなと思い作ったアプリです。

「ある」こと、とは、そう「リサーチ」です!

小さな子供がいる家庭は事前の下調べをしっかりする傾向にあります。
その下調べが意外と時間がかかるのです。
このアプリは下調べを時短し、公園をもっと楽しむ目的で制作しました。

# 使用環境
ruby 3.0.4
Ruby on Rails 6.1.6
PostgreSQL 14.4

# 問題の洗い出し
ヒアリングで出てきた、下調べの主な内容
– 遊びたい遊具があるか(赤ちゃんブランコなど)
– 必要な施設があるか(トイレ、休憩所)
– 季節の遊びは始まっているか(じゃぶじゃぶ池)
– 周辺情報(食事が取れる場所はあるかなど)
– イベントやっているか(盆踊り・シャボン玉・自然体験など)

# 問題解決のための実装した機能と使いかた
– 住所から公園の検索
– 遊具・施設から公園の検索
![検索

元記事を表示

新人エンジニアが感じたあんなことやこんなこと

## はじめに

みなさんこんにちは。
プログラミング歴4ヶ月の新米エンジニアです。
入ったばかりの頃は「おぶじぇくとしこう?^_^」みたいな感じでしたが、最近ようやく慣れてきました。

うちの会社のエンジニア部門は、5人ほどのチームに分かれて開発を進めています。
新人だった私もチームに配属されて3ヶ月が経ったので、実際に働いてみて感じてきたことをエンジニア・新社会人それぞれの視点でまとめていこうと思います。

## 〜エンジニア編〜

### その動詞どういう意味?

初期の初期に感じていたことはこれです。
「走る」「叩く」「吐く」「食わせる」など、その動詞自体は知っているけどどういう意味で使っているのかが分からないという言葉がゴッロゴロありました。
話の流れ的に多分こういう意味なんだろうな〜となんとなくは推察していましたが、慣れるまではエンジニア特有の言い回しに戸惑いまくってました。

### RubyMine、便利すぎ

本当にすごいですよね、RubyMine。
それまでプログラミング用のコードエディターを使ったことがなかった私にとって、RubyMineの機能は衝撃的なものばかり

元記事を表示

Rails actioncable チャットが複製されるバグ

## 状況
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2095922/197a74b2-696f-4f51-afe1-74a358d1e6e2.png)

– 送信者の画面でのみ複製される
– リロードしたら治る
– DBに保存されているのはちゃんとひとつ
– ルームを変える→チャットを送信→ルームを変える→チャットを送信、を繰り返すと1個づつ増えていく

## 解決策
下記記事を参考。
([https://teratail.com/questions/179546](https://teratail.com/questions/179546))
一言でまとめるとunsbscribeメソッドを使えば解消した。
上記はjQueryで書かれているが、自分はjavascriptで書いた。
“`jsx
consumer.subscriptions.create(“RoomChannel”, {
connected() {
// Called when the subs

元記事を表示

Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第2章】(3.リファクタリング〜5.バリデーションの設定まで)

## 概要
前回の記事(第1章)で作成したアプリの続きです。
[Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第1章】(1.アプリ作成〜2.CRUD処理まで)](https://qiita.com/web_fumiya/items/11c45c5d49fa9ab832c3)

今回の第2章では、コントローラの処理のリファクタリング、ビューファイルを部分テンプレートで共通化、フラッシュメッセージの設定&表示、モデルにバリデーションの追加という流れで進めていきます。

## 開発環境
– Ruby 2.7.3
– Rails 6.1.6.1
– Postgresql

## 開発手順
1. アプリの作成 (第1章)
2. CRUD処理で簡単なメッセージ投稿アプリを実装 (第1章)
3. リファクタリング (第2章)
4. フラッシュの実装 (第2章)
5. バリデーションの設定 (第2章)

元記事を表示

Aws::Sigv4::Errors::MissingCredentialsError

# Aws::Sigv4::Errors::MissingCredentialsError」
AWSのEC2のデプロイで、エラーの原因が分からなくて苦労したので備忘録。
EC2へデプロイ時に「Aws::Sigv4::Errors::MissingCredentialsError」が出るので、
.envに原因があるのでは?と思い、AWS_ACCESS_KEY_IDを小文字から大文字に変えたり、
あらゆる記事で記述方法を確認しても、、ずっと同じエラー文。。。

### 結論
先に結論から書きます。アプリのrake secretが、インスタンスを再起動したら、なぜか乱数が変わっていて、エラーが出ていました。EC2のsecrets.ymlを新しく生成されたものを記述し直して、デプロイをすると成功しました。

今回私がエラー発生から解決まで打ったコマンド

[ローカル]
“`
$ bundle exec rake secret
“`
→ 乱数をコピーしておく

[EC2にて実施]
secrets.ymlファイルディレクトリに移動する。
“`
$ cd /var/www/アプリケーション名/

元記事を表示

【Ruby】ループ処理をより簡潔に書こう(each,map,&:)

## はじめに
どうも、もきおです。Rubyのループ処理はfor,each,mapなど色々と選択肢がありますよね。今回はループ処理をより簡潔に書く方法をメモとして残しておきたいと思います。

最後に実務でループ処理をどうリファクタリングしていったかを記載しておくので最後までご覧いただけますと幸いです。
## データ作成
まずはデータを作成していきます。今回はnameカラムを持ったuserを作成し、userをループ処理してnameを配列に格納してname一覧を作成するという処理をしていきます。
“`ruby:
class User
attr_accessor :name
end

user1 = User.new
user1.name = “鈴木”
user2 = User.new
user1.name = “佐藤”
user3 = User.new
user1.name = “小林”

users = [user1, user2, user3]
“`

## eachでループ処理して配列作成
まずはeach文。each文でループ処理して新たな配列に格納するには事前に空配列を定義

元記事を表示

【Rails初心者】いいね機能追加まとめ

## _【Rails初心者】いいね機能追加まとめ_
いいね機能を追加する方法を自分なりにまとめてみた…

## いいね機能とは?
いいね!ボタン(英語: like button、like option、recommend button)とは、
好き/楽しい/支持できる といった意志を示すための機能である。

インターネットサービスにおいて通常コンテンツごとにこのボタンを押したユーザー数が表示され、
場合によっては押したユーザーのリストを全部もしくは一部表示できることもある。

これはコンテンツへの反応を表現する点で、レスを文章で書き込むといった他の方法に対し、定量的な代替手段である。

[wiki参照](https://ja.wikipedia.org/wiki/%E3%81%84%E3%81%84%E3%81%AD!%E3%83%9C%E3%82%BF%E3%83%B3)

## 必要なこと
– いいね機能に必要な DBの追加
– モデル作成
– モデルに関連付けを追加`
– Routing
– コントローラを作成
– View編集

## いいね機能を作成
### 1.いいね機能

元記事を表示

Ruby on Rails | 俺はform_withと分かり合いたい

## form_withとは
RailsでのActionViewフォームヘルパーの一つで、フォームのマークアップを自動生成する際に基本的に使用する。

https://railsguides.jp/form_helpers.html

## データの送信先を指定する
特定の画面のフォームから送られてきた値を任意のコントローラーで利用したい場合、以下のように**urlオプション**に名前付きルーティングヘルパーを指定することで、任意のコントローラーに対してデータを送信できる。

必要に応じてmethodオプションを付与することで送信時のHTTPメソッドも選択することが可能。
methodオプションに特に指定がない場合のデフォルトのHTTPメソッドとしてはPOSTが指定される。

“`ruby
<%= form_with url: users_path, method: :get do |form| %>

<% end %>
“`

生成されるHTML

“`html

・・・

元記事を表示

【分野別】VSCodeのおすすめ拡張機能まとめ

## はじめに

今回はVSCodeでおすすめの拡張機能を分野別に紹介していきます。

拡張機能は下記の分野に分けて紹介していきます。

– VSCodeを使う全員向け
– Web制作関連
– HTML&CSS関連
– WordPress関連
– フロント向け
– JavaScript
– React
– Vue
– サーバーサイド向け
– PHP
– Ruby
– その他

拡張機能を利用することで開発の生産性を上げることができるので、ぜひ参考にしていただければなと思います。

## この記事の対象者

– プログラミング初心者の人
– 分野別におすすめの拡張機能を知りたい人
– 開発の生産性をより上げたい人

## VSCodeを使う人全員向け

まずはじめにVSCodeで開発をしている人、全員におすすめをしたい拡張機能を紹介しておきます。

自分自身が使った拡張機能の中で「**とりあえず入れて損はない**」というものを厳選しています。

それでは紹介していきます。

#### Japanese Language Pack f

元記事を表示

【Rails6系、ActionCable、デバック】チャットappでチャットが複数送信されてしまう不具合の解消

# 【 前提 】
ActionCableを使用したチャットapp
チャットルームは複数作成可能
この記事は日本酒をガバガバ飲みながら書いているため後々修正が入る場合がございます

## 開発環境
Rails: 6.0.3
Ruby: 3.0.1
DB: postgresql, redis
PC: Mackbook Air

## デバック前コード
“`ruby:channels/room_channel.js
import consumer from “./consumer”

document.addEventListener(‘turbolinks:load’, () => {
console.log(“addEventListener turbolinks:load”)
window.chatContainer = document.getElementById(‘chats’)

const element = document.getElementById(‘room-id’);
const room_id = element.getAttribute(‘d

元記事を表示

【Ruby on Rails】GUI でのアップロードを介さず CarrierWave にファイルを保存する方法

Rails アプリで画像などのファイルを保存したいと思った際、有力な候補として上がる gem としては [CarrierWave](https://github.com/carrierwaveuploader/carrierwave) などが挙げられるでしょう。

で、多くの記事においては

“`ruby:./app/uploaders/file_uploader.rb
class FileUploader < CarrierWave::Uploader::Base storage :file end ``` ```ruby:./app/models/post.rb class Post < ApplicationRecord mount_uploader :file, FileUploader end ``` ```erb:./app/views/posts/_form.html.erb <%= f.file_field :file %>
“`

“`ruby:./app/controllers/posts_controller.rb
class PostsCont

元記事を表示

Rubyのクラスについて

Rubyのクラスについて自分の備忘録としてまとめます。

# クラスとは
クラスはデータの入れ物(データそのものではない)とその処理をまとめたものです。

# クラスの使用例
例えば、商品の価格と原価のデータがあり、利益を計算したいと思います。

## クラスを使わない場合

クラスを使わない場合、次のように計算することができます。

**例1**
“`ruby:shohin_cal1.rb
ringo_name = “りんご”
ringo_genka = 100
ringo_kakak = 200
puts ringo_kakak – ringo_genka #=>100
#putsは引数(文字列)を出力するメソッド。

ichigo_name = “いちご”
ichigo_genka = 200
ichigo_kakak = 400
puts ichigo_kakak – ichigo_genka #=>200
“`
例1では、商品の数が多くなると記載する量が多くなってしまいます。また、ringoと記載するべき場所にichigoと記載してしまうなどの間違いをする可能性があ

元記事を表示

SidekiqのActiveRecord::ConnectionTimeoutErrorを解決した話

# 最初から結論
sidekiqの実行中
“`
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.019 seconds)
“`
エラーが発生したのでrailsのdatabase.yamlのconnection poolを増やして解決しました。

# 何が起こったか
sidekiqが実行されているサーバーから急に1時間200件頻度で以下のエラーが発生しました。
“`
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.019 seconds)
“`
特に修正したことは無かった状態でアクセスが多かっただけを把握しました。

# 調査のスタート
Tracebackを確認すると
User.where(id: ids).order(name: :desc)
でs

元記事を表示

Rails初級者が一ヶ月研修を受けて得た学びをまとめた

# 前書き
– RubyonRailsで開発している企業にサーバーサイドエンジニアとして転職し、一ヶ月間受けた研修で得た学びを雑に分類してまとめました。
– どの言語でもそうですが独学で初心者向け記事やチュートリアルを読み込むだけでは得られない内容が多くあったのでまとめてみた。これまでこういったまとめを作ったことがなく初めてです。
– 完全に自分のメモ書きですが、 **Railsやコーディングに初めて取り組む人にとっては役立つこともあるかと思いまとめています**

## 自分の経験とスキル
– 前職で一年間toB向けWebサービスのフロント+バックエンド+インフラ(ちょこっと)に携わっていた
– NuxtJs+NodeJs、DBはCloudSQLとかとか。
– NodeJsで開発したAPIをコンテナ化してCloudRunにデプロイしたりなどの基本的なことはできる
– Railsは半年ほど前に初めて触った。ORM自体の経験もほとんどない
## 研修概要
– **事前にRailsで自分が開発した簡単なTodoアプリをレビューしてもらい、改善点・問題点を先輩がリストアップ**
– **各項目

元記事を表示

【rails db:migrateに失敗】StandardError (An error has occurred, this and all later migrations canceled:PG::DuplicateTable: ERROR: relation “posts” already exists ):

# 事象

マイグレーションの移行のため、`rails db:migrate`を実行すると、以下のエラーが発生。
“`
StandardError (An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR: relation “posts” already exists
):
“`
データベースに`posts`が既に存在しているというもの。
前回一度`rails db:migrate`をしたが、一旦全てのアプリを削除し、今回は再作成している状況であったため、残っていたと想定。

# 解決方法
まずは、現状を以下で確認。
“`
❯ rails db
“`
前回作成したデータベースの`posts`を削除するために以下を実行。
モードが切り替わり、`post_bootstrap_app_development=#`となるため、以下を`\d`を実行。
すると、以下のように、`posts`の存在を確認。
“`
List of

元記事を表示

Rails初級者が一ヶ月研修を受けて得た学びをまとめた~Docker・ほか~

この記事は「[Rails初級者が一ヶ月研修を受けて得た学びをまとめた – Qiita](https://qiita.com/Nifu-Uchi/items/f676d9f082e8c02bd88d)」の環境構築とDockerとその他の項目を切り出した分割記事です。
概要などについては親記事を参照してください。

# 環境構築・その他

### CPUアーキテクチャにあったplatformの設定をする(M1対応)
– [Ruby BundlerでCPUアーキテクチャにあったgemをインストールする](https://zenn.dev/fuuukeee3/articles/df15e32cf3706407a0a6)
– 最終的にこれらのplatform対応を実施
“`Gemfile.lock
PLATFORMS
aarch64-linux ##Docker環境
arm64-darwin-21 ##M1 Mac
x86_64-linux ##intel mac
“`

## Docker
### DockerfileのCOPYは中間ファイルが増えるので出来るだけまとめる
“`D

元記事を表示

OTHERカテゴリの最新記事