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

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

[個人開発]一つのフォームをみんなで編集し合う掲示板を作ってみた!

今回作ったもの
https://www.synher.net/

最初の数秒は何もフォームに何も表示されないかもですがバグではないので、リロード等はしないでください。

# 初めに
一年ぶりとなってしまいましたが新しいwebアプリを作ってみました。それがSYNHERです。
![スクリーンショット 2022-06-14 225643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/f059fb68-cab5-17cf-527b-43ca2d6555d3.png)

vueを使ったアプリで初めての公開になりました。

# 概要
![Animation2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/a3fcd33f-ea48-bb00-97d0-6b14b98fafbc.gif)

このようにリアルタイムでいろいろな人とフォームを編集して遊ぶアプリです。

# 何で作ったか
自分は「Reddit

元記事を表示

TECH CAMP 9日目 ~N+1問題~

# 学習内容
– Ruby on Rails
 - `max-length`オプション・・・inputタグを生成するヘルパーメソッド
 - `devise-parameter-sanitizer`メソッド・・・devise特有のパラメーターを取得するメソッド
 - `configure-permitted-parameters`・・・deviseでは新たに定義するメソッドをこの様に定義するが、本当は何でもいい。語尾に**s**がついているので注意
 - リダイレクト・・・本来受け取ったパスとは別のパスに転送する。
 - `unless`・・・falseの時elseまたは、endまでの処理を行う。ifと反対
 - `merge`メソッド・・・ハッシュを結合させるメソッド
 - アソシエーション・・・`has_many`メソッドと`belongs_to`メソッドがある。モデルに記載する。
 - N+1問題・・・引数に指定された関連モデルに一度のアクセスでまとめて情報を取得できる。
 - ルーティングのネスト・・・モデルと結びついている別のモデルのid情報を含めることができる

# 苦労した

元記事を表示

【Ruby on Rails】APIのエンドポイントにケバブケース(kebab-case)を設定する

# この記事について
RailsでAPIを作成する際、エンドポイントを設定しますが、 `/api/v1/sample-apis` のように複数単語(「sample apis」)の部分はkebab-caseを使用することが多いかと思います。
しかし、Rubyの命名規則的には、ファイル名はsnake_caseかと思いますので、snake_case→kebab-caseの変換を行う必要があります。
この記事では、Railsのエンドポイントでsnake_case→kebab-caseの変換方法を記録として残したいと思います。

# コントローラクラスの作成
エンドポイント `api/v1/sample-apis` に対するコントローラクラスを作成します。
RailsではControllerクラスのフィル名をsnake_caseで記述し、 `<エンドポイントのsnake_case>_controller` となるため、 `sample_apis_controller.rb` としております。
`api/v1/` の部分はmoduleを使用することとします。

“`rb:app/controll

元記事を表示

【Rails】AppleMusicを投稿して埋め込む方法

# 1:概要

**apple musicのリンクを投稿し、サイトに埋め込む方法**を2つを紹介していきたいと思います。
サイト上で試聴も可能なため、音楽投稿系サイトを作りたい方々にはおすすめ:relieved:
使いたい方法に応じて選んでいただけたら幸いです。spotifyでも応用できるかと思います。

方法はこの二つです!
①埋め込みリンクを投稿する方法
②普通の共有リンクを投稿して埋め込む方法

使い分け方法は以下を参考に!
①`曲・アルバム・プレイリストのカラムを分けずに投稿できる`
②`携帯のMusicアプリからリンクをコピーして投稿できる`

### 完成図イメージ

![GIF 2022-06-14 5-15-46.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373315/c87bbb5c-6c0a-7e66-f0d6-1b8fc459ffcf.gif)

### 前提
基本的なCRUD機能に関してはすでに実装出来ているものとします。コントローラー名はpostsで記述しています。

元記事を表示

Rails6 Heroku デプロイで発生したエラーとその対処法

RubyとRailsの最新の安定版(2022年6月14日現在での最新の安定版)でherokuへのデプロイを行なった。
その際に発生したエラーをまとめてみました。

## 環境
– mac OS
– ruby 3.1.2 (2022年6月14日現在での最新の安定版)
– rails 6.1.6 (2022年6月14日現在での最新の安定版)
– node 16.13.0 (12以上にしといたほうがいいらしい)
– yarn 1.22.19 (1以上にしといたほうがいいらしい)
## 発生したエラー

### ****Failed to install gems via Bundler****

このエラーは`git push heroku main`コマンドを実行したときに発生。
下記記事の通りでうまくいく。
(https://qiita.com/m6mmsf/items/fb8a8672df98bdb59c9c)

### you don’t have net-smtp installed in your application. please add it to your gemfil

元記事を表示

has_manyとbelongs_toを完全に理解した。

最近railsチュートリアルを完走した22卒エンジニア(男)です。railsのアソシエーションについてです。

railsチュートリアルでhas_many、belongs_toを理解した(つもりだった)のですが実務で全く使いこなせませんでした。で、改めて勉強して**初学者が理解しやすいような表現**がなんとなく分かった気がしたので記事に残します。

※ 私の表現が間違っていたりすることもあるかもしれませんのでその際はご指摘いただければ幸いです。

# 対象者
– has_many、belongs_toが既存の記事であまり理解できない。
– 私のようにhas_many、belongs_toを完全に理解した(つもりの)人

# has_many、belongs_toの正体
## 公式リファレンス
まずrailsガイドの[has_many](https://railsguides.jp/association_basics.html#has-many%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91:~:text=%E3%81%AB%E3%81%AA%E3%82%8A

元記事を表示

TECH CAMP 8日目 ~ストロングパラメーターって何…~

# 学習内容
– Ruby on Rails
 - __`form_with`のおさらい__・・・`method: @インスタンス関数`とすると、newメソッドで送る場合はcreateアクションへ、findメソッドで送る場合はupdateアクションへ自動的に振り分けてくれる。
 - __ストロングパラメーター__・・・意図しないデータベースの読み書きを防ぐため。`require`と`permit`を使う。送信されたパラメーターにどの情報を取得するかを選択する。例)`params.require(:モデル名).permit(:キー名)`
 - __プライベートメソッド__・・・クラス外から呼び出せない。メリット1:必要のない変更操作などを防ぐ安全性が担保できる。メリット2:アクション探す時private見ないので時短
 - __`validates`メソッド__・・・データを登録する際に、一定の制約をかける。例)`validates :カラム名, バリデーション`
 - __`Prefix`__・・・ルーティングのURLに名前をつけた変数。`rails routes`で確認できる
 
#

元記事を表示

会社のサービスで自分専用のstaging環境を作った

22卒エンジニアしてますみっちーです。
メンターエンジニアの方からインフラ学習用に君専用のstaging環境作っていいよと言われ作ることになりました。

メンターの方の狙いとしては
– 新卒の自分にインフラ知識のキャッチアップ
– 非エンジニア、外部エンジニアの方の動作確認用の環境(こっちがメイン笑)

サービスの規模拡大に伴い関わる人も多くなってきて、staging環境が追加で必要になったため追加で作ることになりました。
自分としては無料でインフラ構築、学習ができてラッキーです。

# やったこと
– AWSのEC2インスタンス、S3、Route53、セキュリティ周り etc…(サーバー構築)
– CircleCIで環境変数とSSHパーミッションを設定、CI側でリポジトリをフォロしているかの確認
– CircleCI 設定ファイル(config.yml、その他三つくらいstging環境と同じもの追加)を作成
– 非エンジニアの方向けに特定ブランチにpush & deployしてくれるスクリプトの作成
– 非エンジニアの方にgithubの勉強会

# つまづいたこと
設定ファイル

元記事を表示

ActiveAdminの検索条件の入力欄の左右を入れ替える方法

# 概要
ActvieAdminの検索条件でテキスト入力で検索する場合に、
「を含む」「等しい」「で始まる」「で終わる」が表示されます。

日本語化すると違和感あるため、修正したいなと思って試行錯誤した結果、
CSSで左右入れ替えることにしました。

# 環境
Rails 7.0

Gemfile
“`
gem ‘activeadmin’
gem ‘devise’
# 日本語化
gem ‘rails-i18n’
gem ‘devise-i18n’
gem ‘enum_help’
“`

# 対策
app/assets/stylesheets/active_admin.scssに追加
“`
#active_admin_content {
#sidebar .sidebar_section .select_and_search {
input {
float: left !important;
}
select {
width: auto;
margin-left: 4px;
}
}
}
“`

# スクリ

元記事を表示

requireとは?permitとは?ストロングパラメータとは?

# はじめに
WebからPostリクエストやPatchリクエストによって送られきた情報は**paramsの中のモデルの中の値**のように入れ子構造になって格納され、サーバーに渡される。
“` 言語名:app/controllers/posts_controller.rb
def post_params
# params[:post][:content]のように階層構造になっている
params.require(:post).permit(:content)
end
“`
これだけのコードだが、一つずつ読み解いていく。

使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
# 目次
[1.requireとは](#1-requireとは)
[

元記事を表示

?【Rails】簡単な投稿検索機能の実装

# はじめに
今日の内容は投稿検索機能の実装。簡単な内容なので初学者でもできるはず!
早速始めていきます!

# 投稿検索機能実装
まずはビューから!
“`rails:app/views/posts/index.html.erb
<%= form_with(url: search_posts_path, local: true, method: :get, class: "search-form") do |form| %>
<%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %>
<%= form.submit "検索", class: "search-btn" %>
<% end %>
“`
form_withの`text_field`と`submit`を使って検索窓と検索ボタンを作成しました。
続いてsearchアクションのルーティングを設定していきます。
の前に`collection`と`member`を設定していきます。
collectionとmemberは、ルーテ

元記事を表示

【binding.pry】エラーは出ないけど、画像投稿出来ない時の対処法

#前提
この記事のVS codeにインストールしたrails6.0.0を使用しています。
私のオリジナルアプリケーション(躓いたこと)を用いて、誰かの役に立つ記事になればと思います。

#結論
binding.pryで一時停止をして、パラーメータをチェックする。
※Gemfileに「gem ‘pry-rails’」を記入し、「bundle install」を行う必要あり。
MVCを理解し、間違いを探す方法を習得する方法を習得する。

#アプリケーション概要
私は写真記録のオリジナルアプリを作成しました。
ユーザー登録をしているメンバーで日本一周の写真を記録するためのアプリケーションになります。

#内容
投稿しようと思ったが、情報が投稿されない。
“`
def create
@prototype = Prototype.new(prototype_params)
if @prototype.save
redirect_to root_path
else
render :new
end
end
“`
どうしてもelseに入っ

元記事を表示

RspecでActiveRecord::RecordInvalid: バリデーションに失敗しました

#環境

初めて記事を書かせて頂きます?‍♂️
間違っていたら指摘お願いします
M1
ruby3.1.0
rails 6~

—-

#経緯
—-
一度通ったテストが
RspecでActiveRecord::RecordInvalid:バリデーションに失敗しました
に阻まれて沼ったお話

テスト対象はuserなのに何故か違うテーブルのバリデーションがかかってしまう

#結論
—-
アソシエーションをしていたから

今回作っていたテーブルの関係性を説明します

userテーブル, postテーブル, categoryテーブル

user 1対多 post
user 1対多 category

post 多対1 user
post 多対1 category

category 多対1 user
category 1対多 post

アソシエーションを組む事によって
postを作るにはuser, categoryが必要
categoryを作るのはuserが必要
という風になっていました

#Rspec
—-
“`
spec/requests/posts_spec.

元記事を表示

[Ruby]warning: already initialized constant Digest::REQUIRE_MUTEXの解決法

## 概要
ある日自分の開発しているPFでこのような警告表示が出たので解決法を備忘録として残します。

rails routesを実行後
“`
~省略/.rbenv/versions/3.0.2/lib/ruby/3.0.0/digest.rb:6: warning: already initialized constant Digest::REQUIRE_MUTEX
〜省略/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/digest-3.1.0/lib/digest.rb:20: warning: previous definition of REQUIRE_MUTEX was here
“`

## 解決法
[こちら](https://geniusium.hatenablog.com/entry/2021/06/15/133317)の記事を参考に
概要gemをアンインストールした後、updateした
“`
$ gem uninstall digest
“`
“`
$ gem update –default
“`

##

元記事を表示

Ruby on Railsの環境を構築する際のNginx設定ファイルのコマンド及びコード理解

## なぜ記事を書こうと思ったか
Nginx 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## default.confのコマンド説明
default.conf
“`
upstream puma {
server app:3000;
}

server {
listen 80;
server_name localhost;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

root /app/public;

location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass

元記事を表示

【個人開発】ピースサインで開いた指の角度で競い合ってみるサービスを開発しました✌️

# ?はじめに?
写真を撮っている時、たまに見かけませんか?

「あの人、ピースサインの指、開き過ぎちゃう?」

そして考えました。

「あの人のピースサイン、何度くらい開いているのか…知りたい!」

そんなもどかしい好奇心から生まれたサービスを紹介します◎

(補足)
所謂ネタアプリですがこちらPFコンテストでの優秀賞作品になりました✌️
本戦の様子が公開されているのでお時間ある方は是非ご覧ください^^
他の登壇者の作品も素敵なサービスばかりでした✨

# ?サービス概要?
[![Image from Gyazo](https://i.gyazo.com/31ff6d41b383bf24f830cc70c761a632.png)](https://gyazo.com/31ff6d41b383bf24f830cc70c761a632)

ピースサインで開いた指の角度で競い合ってみるサービスです✌️

https://www.peace-sign-competition.com/

https://gi

元記事を表示

未経験の新人でも1ヶ月で「使える」人材に育てる仮想プロジェクト型研修(前編)

## 未経験開発者の育成って難しいですよね。

色々なことを覚えてもらわないといけないし、時間はそんなにかけられないし。
教える先輩が忙しくて手が空かない。

当社では開発未経験の新人さんが入ってくると、研修の一環として仮想の開発プロジェクトを立ち上げて、
仕様決めからリリースまでの一連の開発作業を体験してもらっています。

この仮想開発プロジェクトが終了してから、実際の開発チームに合流してもらっているのですが

**これまでとてもスムーズに開発チームに合流できています。**

この仮想開発プロジェクトがどんな感じのものなのか。
実際にどのように進めていくのか。
といったことを、この仮想開発プロジェクトをサポートする先輩の視点からお伝えしようと思います。

ちなみに、新人視点の記事はこちらです。

– [ 経験ゼロの新人が1ヶ月でウェブアプリを作らされるヤバい研修 part 1](https://qiita.com/Terao-Takumi/items/d2b02a4cf0470675107e)
– [「完全に理解した」状態の僕が「チョットワカル…」になるまでのとある企業の新人研修

元記事を表示

【Rails】通知機能~変更点と補足~

## 記事の対象者
実装した処理の動きについて理解したい人

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 参考にした記事
実装については、下記記事を参考にしました。
今回は一部変更した点と、実装した処理の動きについて自分で補足した部分を書いていきます。

https://qiita.com/nekojoker/items/80448944ec9aaae48d0a#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E8%A8%98%E4%BA%8B

## 実装の流れ(フォロー通知)
**①通知モデルの作成(Notification)
②モデルの関連付け(UserとNotification)
③モデルに通知作成メソッドを作成
④コントローラーに通知作成メソッドの呼び出し処理作成
⑤ビューに通知一覧画面及び通知アイコンの作成**

## 変更箇所
下記が変更点となります。補足を交えながら説明していきます。
・default_scope
・update_attributesメソッド

## ②モデルの関連付け(UserとNo

元記事を表示

Viteを使っているRailsアプリに一部のBootstrap 5を導入方法

Bootstrapはかなり有名で便利ですね。早くアプリケーションが使えるようにするためよく使う場合が多いと思います。
しかし、いつも全てのBootstrapの機能が必要ではない場合もあります。その時に一部の機能だけ導入すればいいです。

今回はViteを使っているRails 7アプリにBootstrap 5を導入してみました。

### Bootstrap 5 と popperjs/coreを導入
“`
yarn add bootstrap @popperjs/core
“`

### BootstrapのCSSを導入

“`scss:app/assets/stylesheets/bootstrap.scss
@import ‘bootstrap/scss/functions’;
@import ‘bootstrap/scss/variables’;
@import ‘bootstrap/scss/mixins’;

@import ‘bootstrap/scss/dropdown’;
“`

例え`dropdown`だけ使いたくても、`function`、`variable

元記事を表示

ECS FargateとElasticBeastalk(Ruby Platform)を比較

昨年、[本番稼働を意識したECS Fargateを用いたFastAPIの環境構築(ALB、SSM、BlueGreenデプロイ)](https://qiita.com/yuyasat/items/04a083a57f5691f1ed3c)という記事を投稿しました。その後、仕事にて実運用でECS Fargateを利用し始め、ある程度感覚がわかってきましたので、以前利用していたElasticBeanstalk(Ruby Platform)との比較を簡単に紹介したいと思います。
仕事では、ECS Fargateは2022年2月末に本番運用を開始しています。また、ElasticBeanstalkに関しては、2017年より仕事で使っています(既にある環境の運用から始まり、新規構築も何度か行いました)。その経験を踏まえて感じたことですので、使用している機能が限定的だったり、詳しい方から見れば容易に改善できる面もあるかと思います。ご教授いただけましたら幸いです。

## 1. デプロイのしやすさ
| | ElasticBeanstalk | ECS Fargate |
|—|—|—|
|

元記事を表示

OTHERカテゴリの最新記事