- 1. Railsの非同期いいねの方法
- 2. 【個人開発】「ロードバイク乗りのためのお店検索WEBアプリ」制作しました【Cycle Depot】
- 3. Rails6で通知機能を実装(ポリモーフィック)
- 4. Vultr VPSにCentOS9+Rails 7+MySQL8+nginxをインストールしてCapistrano3でデプロイ
- 5. 【初・個人開発】公園検索コミュニティアプリ 「COMO(コモ)」 作りました
- 6. 新人エンジニアが感じたあんなことやこんなこと
- 7. 正規表現メモ(Ruby)
- 8. Rails actioncable チャットが複製されるバグ
- 9. Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第2章】(3.リファクタリング〜5.バリデーションの設定まで)
- 10. Aws::Sigv4::Errors::MissingCredentialsError
- 11. 【Ruby】ループ処理をより簡潔に書こう(each,map,&:)
- 12. Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較
- 13. Dockerで「Everyday Rails RSpecによるRailsテスト入門」の環境構築をするメモ
- 14. Ruby on Rails | 俺はform_withと分かり合いたい
- 15. 【Rails6系、ActionCable、デバック】チャットappでチャットが複数送信されてしまう不具合の解消
- 16. 【Ruby on Rails】GUI でのアップロードを介さず CarrierWave にファイルを保存する方法
- 17. Rubyのクラスについて
- 18. Rails初級者が一ヶ月研修を受けて得た学びをまとめた
- 19. Rails初級者が一ヶ月研修を受けて得た学びをまとめた~Rails~
- 20. Rails初級者が一ヶ月研修を受けて得た学びをまとめた~GithubActions・RSpec~
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.rbclass 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## 前提
下記ができ
Vultr VPSにCentOS9+Rails 7+MySQL8+nginxをインストールしてCapistrano3でデプロイ
# はじめに
CentOS Stream 9が出たのでRails 7環境を構築して既存アプリのRails、Rubyのバージョンアップと移行をやったので、手順を記録した。[CentOS8での記事](https://qiita.com/NYC-Blue/items/691e673862282df6ddbc)のCentOS9版です。Vultrの一番安い10GB SSDプランだとCentOS9ではディスクが足りなくなるので25G以上をお勧めします。
激安VPSの[Vultr](https://www.vultr.com/?ref=8478497)で[紹介者からのリンク](https://www.vultr.com/?ref=8478497)経由でアカウント登録すると$100のクレジットをもらえるので、CentOS7, 8, MySQL 5.7, 8などの組み合わせをいろいろ試しました。このキャンペーンはいつ終わるか分からないので、興味のある方は以下のリンクからアカウント登録してください。あなたはクレジットをもらえるし、私にも多少のクレジットが入るらしいので、Win-Winです。
###
【初・個人開発】公園検索コミュニティアプリ 「COMO(コモ)」 作りました
# はじめに
こんにちは、ご覧いただきありがとうございます。@Rei33_Qiitaと申します。
このアプリは、私の実体験とママ友からの意見を元に、子供と公園に遊びに行く前にしている、「ある」ことを時短できたらいいなと思い作ったアプリです。「ある」こと、とは、そう「リサーチ」です!
小さな子供がいる家庭は事前の下調べをしっかりする傾向にあります。
その下調べが意外と時間がかかるのです。
このアプリは下調べを時短し、公園をもっと楽しむ目的で制作しました。# 使用環境
ruby 3.0.4
Ruby on Rails 6.1.6
PostgreSQL 14.4# 問題の洗い出し
ヒアリングで出てきた、下調べの主な内容
– 遊びたい遊具があるか(赤ちゃんブランコなど)
– 必要な施設があるか(トイレ、休憩所)
– 季節の遊びは始まっているか(じゃぶじゃぶ池)
– 周辺情報(食事が取れる場所はあるかなど)
– イベントやっているか(盆踊り・シャボン玉・自然体験など)# 問題解決のための実装した機能と使いかた
– 住所から公園の検索
– 遊具・施設から公園の検索
![検索
新人エンジニアが感じたあんなことやこんなこと
## はじめに
みなさんこんにちは。
プログラミング歴4ヶ月の新米エンジニアです。
入ったばかりの頃は「おぶじぇくとしこう?^_^」みたいな感じでしたが、最近ようやく慣れてきました。うちの会社のエンジニア部門は、5人ほどのチームに分かれて開発を進めています。
新人だった私もチームに配属されて3ヶ月が経ったので、実際に働いてみて感じてきたことをエンジニア・新社会人それぞれの視点でまとめていこうと思います。## 〜エンジニア編〜
### その動詞どういう意味?
初期の初期に感じていたことはこれです。
「走る」「叩く」「吐く」「食わせる」など、その動詞自体は知っているけどどういう意味で使っているのかが分からないという言葉がゴッロゴロありました。
話の流れ的に多分こういう意味なんだろうな〜となんとなくは推察していましたが、慣れるまではエンジニア特有の言い回しに戸惑いまくってました。### RubyMine、便利すぎ
本当にすごいですよね、RubyMine。
それまでプログラミング用のコードエディターを使ったことがなかった私にとって、RubyMineの機能は衝撃的なものばかり
正規表現メモ(Ruby)
この記事は正規表現を利用する機会が少なく、毎回必要になった時に調べ直している筆者がその手間を省くために書いたメモです。
# 正規表現検証ツール(Ruby)
[Rubular](https://rubular.com/)# (筆者が)よく使う例
|正規表現|マッチ|メモ|
|:—|:—|:–|
|/\d+/ または /[0-9]+/|この前餃子を`10`個たのんで、`3`個食べて、`7`個は友達にあげました|数字の羅列にマッチ|
|/\d{3}-\d{4}/|郵便番号は`123-4567`です|郵便番号にマッチする|
|/\d{4}年\d{1,2}月\d{1,2}日/|君の誕生日は`2022年3月3日`だったんだね|日付にマッチ|
|/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i|私のメールアドレスは`hoge.fizz@example.com`です|メールアドレスにマッチ|# 正規表現で利用する特殊文字
|特殊記号|意味|使用例|使用例のマッチ|
|:—|:—|:–|:–|
|[]|カッコ内で指定した文字のどれ
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
enduser1 = User.new
user1.name = “鈴木”
user2 = User.new
user1.name = “佐藤”
user3 = User.new
user1.name = “小林”users = [user1, user2, user3]
“`## eachでループ処理して配列作成
まずはeach文。each文でループ処理して新たな配列に格納するには事前に空配列を定義
Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較
Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較
# Python
https://qiita.com/G-Rape/items/cd3f2f284ba990164564
# Ruby
https://www.tohoho-web.com/ruby/operators.html
# PHP
https://qiita.com/mzmz__02/items/8bfbcf2cd48d9e9f2806
# Java
https://qiita.com/suema0331/items/7045e3ce3e2f5faa9acf
# JavaScript
https://qiita.com/uhyo/items/cc92a553059274d85403
# Perl
https://perlzemi.com/blog/20161005147566.h
Dockerで「Everyday Rails RSpecによるRailsテスト入門」の環境構築をするメモ
## はじめに
Everyday Rails の作業をDocker-composeで環境構築し、勉強していくためのメモ
DBはpostgreSQLを利用## リモートリポジトリからのクローン、作業ディレクトリ作成
-bで指定するブランチのコピーができる“`
git clone -b 01-untested https://github.com/JunichiIto/everydayrails-rspec-jp-2022.git
“`ディレクトリに移動
“`
cd everydayrails-rspec-jp-2022
“`## Docker環境の構築の準備
### Dockerfile
Rubyのバージョンは本書指定の3.1
“`Dockerfile
FROM ruby:3.1.2
ENV LANG C.UTF-8RUN apt-get update -qq && apt-get install -y \
build-essential \
nodejs \
&& rm -rf /var/lib/apt/lists/*RUN
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
【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と記載してしまうなどの間違いをする可能性があ
Rails初級者が一ヶ月研修を受けて得た学びをまとめた
# 前書き
– RubyonRailsで開発している企業にサーバーサイドエンジニアとして転職し、一ヶ月間受けた研修で得た学びを雑に分類してまとめました。
– どの言語でもそうですが独学で初心者向け記事やチュートリアルを読み込むだけでは得られない内容が多くあったのでまとめてみた。これまでこういったまとめを作ったことがなく初めてです。
– 完全に自分のメモ書きですが、 **Railsやコーディングに初めて取り組む人にとっては役立つこともあるかと思いまとめています**## 自分の経験とスキル
– 前職で一年間toB向けWebサービスのフロント+バックエンド+インフラ(ちょこっと)に携わっていた
– NuxtJs+NodeJs、DBはCloudSQLとかとか。
– NodeJsで開発したAPIをコンテナ化してCloudRunにデプロイしたりなどの基本的なことはできる
– Railsは半年ほど前に初めて触った。ORM自体の経験もほとんどない
## 研修概要
– **事前にRailsで自分が開発した簡単なTodoアプリをレビューしてもらい、改善点・問題点を先輩がリストアップ**
– **各項目
Rails初級者が一ヶ月研修を受けて得た学びをまとめた~Rails~
この記事は「[Rails初級者が一ヶ月研修を受けて得た学びをまとめた – Qiita](https://qiita.com/Nifu-Uchi/items/f676d9f082e8c02bd88d)」のRailsに関する項目を切り出した分割記事です
概要などについては親記事を参照してください。# Rubyの文法など基本的なこと
### 配列の種類
– `%i`:シンボル配列。メソッド名、変数名などの配列を作るときに### Hashは省略記法が使える
– Ruby3.1から対応
– [Hashの値の省略記法 – NaCl非公式ブログ](https://nacl-ltd.github.io/2021/12/20/hash-value-omission.html)
– `{ x: x, y:y }` -> `{ x:, y: }`## pp pp puts printの使い分け
– [【ruby】p pp puts print 違い。 – Qiita](https://qiita.com/nyaoo/items/f5d84581d3a301a9c22f)### enumの挙動
Rails初級者が一ヶ月研修を受けて得た学びをまとめた~GithubActions・RSpec~
この記事は「[Rails初級者が一ヶ月研修を受けて得た学びをまとめた – Qiita](https://qiita.com/Nifu-Uchi/items/f676d9f082e8c02bd88d)」のうち分量が多くなりすぎたコード品質担保(LinterやRSpecなど)に関する項目を分割した記事です。
概要などについては親記事を参照してください。# code-checkとGithubAction
– PR時にRSpectとともにLinter/Formatterが走るようにした
– 導入したものは以下
– rubocop
– erblint
– brakeman
– rspec## GithubActions
– [こちらを参照](https://zenn.dev/link/comments/7ece3f5df6eac9)## rubocop
### action-rubocopを使おう
– 指摘箇所があるとPRにコメントしてくれる
– [reviewdog/action-rubocop: Run rubocop with reviewdog ?](