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

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

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 7日目 ~ストロングパラメーターって何やねん~

# 学習内容
– 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 |
|—|—|—|
|

元記事を表示

bundler 2.2.x でのエラーを乗り越えたい

2020年12月に、 Rails アプリの Docker イメージをビルドする CI が突然エラーを起こしたことがありました。これは bundler 2.2.0 がリリースされたことに起因していたため、イメージに入れる bundler を一旦 2.1.4 に固定することで対処しました。

そのままずっと問題に蓋をしていたものの、 bundler は既に 2.2.33 や 2.3.15 が出ているため、きちんと当時のエラーについて調べてバージョンアップしようと思い立ちました。

エラーが何だったのか、 bundler の [changelog](https://github.com/rubygems/rubygems/blob/v3.2.33/bundler/CHANGELOG.md) などを見てもすぐにはわからなかったので、**実際に様々なバージョンで実験して探りました**。( x86-64 の Linux および macOS を対象としています)

## TL;DR
bundler 2.2 からは、 Gemfile.lock に Ruby のプラットフォームの情報( `x86_64-

元記事を表示

RailsでGemを更新したら再起動しましょうという話【初学者向け】

:::note result
**gemを更新したらサーバーを再起動しないと反映されない?**
:::

## 解決策
### dockerなしの通常開発環境の場合
railsを再起動する
“`terminal:terminal
$ rails restart 
“`

### docker環境の場合
“docker compose up -d“で「web」をバックエンドで起動している状態を想定。
“`terminal:terminal
$ docker compose exec web bundle install #gemを更新。これだけじゃ足りない?
$ docker compose restart #dockerの再起動、これが必要?
“`

ちなみに、、、
gem更新後にrailsを再起動すれば良いので以下でもOK。
“`terminal:terminal
$ docker compose exec web bundle install #gemを更新。これだけじゃ足りない?
$ docker compose exec

元記事を表示

EC2にRailsアプリをデプロイするための事前知識 ――パッケージ管理ツールとパッケージ

## はじめに
スクールの課題で、「まずEC2にアプリをデプロイしてみよう。」というものが出された。
調べれば新しいものから古いものまで、いろんな情報が出てくる。
とりあえず見たままコマンドコピペして進めていたけれど、一体今何をやろうとしているのか分からない、エラーがまるで意味不明
という状況になり、挫折。時間はかかるが、ある程度の基礎知識を身に着けながら進めたほうが早そうと判断。
課題も無事終えたので、復習がてら、とり貯めたメモをベースに整理。

## パッケージのインストール時に適当に打ったコマンド
“`
$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel
“`

“`
$ curl -sL https://rpm.nodesource.com/setup_16.

元記事を表示

【Rails】ActionCable~役割について~

## はじめに
実装の流れは長くなるので省略させていただきます。
自分が疑問に思ってノートに記録した物を記事にしていきます。

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 記事の対象者
実装を終えたが、それぞれの役割について理解を深めたい人

## 実装の流れ
リアルタイム機能を持ったDM機能を実装するまでの主な流れです。
用語については、[Railsガイド](https://railsguides.jp/action_cable_overview.html)を参考にしてください。

**①サーバーサイド側のチャネルの処理を実装する
②クライアント側のチャネルの処理を実装する
③コネクションの設定ファイルに変更を加える
④データ保存後の処理をモデルに実装する
⑤ブロードキャストの処理を実装する
⑥表示するviewを実装する**

上記流れの中で、記述方法に注意が必要なものだけ説明します。

## ①サーバーサイド側のチャネルの処理を実装する

コンシューマーがこのチャネルのサブスクライバになると下記コードが呼び出される。
(コンシューマーとはクライアントのこ

元記事を表示

Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1

## 概要

bundle installしたら「Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1」エラーが出たので解決方法を書きました。
1人でも多くの人の役にたてればと思います。

## はじめに

### 使用する環境
– MacOS(Intel)
– Rails 6.0.3
– Ruby 2.6.3
– yarn 1.22.17
– Homebrew 3.5.0

## 状況
bundle installしたら上記エラーが出た。
エラー文はローカルの環境のrubyは2.6.3だけど、gemfileに記述されてるrubyは2.7.1になってるから合わせてねってこと

Rbenvでインストール可能なRubyのバージョンを確認
“`
$ rbenv install -list
“`
バージョンを指定してインストール
“`
$ rbenv install 2.7.1
“`
上記のrbenvでインストール可能欄に入ってなくても直接指定することでインストールすることが可能です。
反映する
“`
$ rben

元記事を表示

OTHERカテゴリの最新記事