Rails関連のことを調べてみた2023年01月11日

Rails関連のことを調べてみた2023年01月11日
目次

薄いコントローラ、分厚いコントローラとは何か

MVCモデルを用いて開発をしている際、「薄いコントローラ」や「分厚いコントローラ」という言葉をよく聞くかと思います。
薄いコントローラとはなんでしょうか?分厚いとどうなるのでしょうか?
コントローラの整理をキッチンの棚の整理に例えて説明していきます。

# コントローラってどうやって書いたらいいんだっけ?
Railsの生みの親であるDHHは下記のように言っています。

>コントローラが元々持っているRESTアクションやデフォルトの5つの機能にはないメソッドを付け加えたいと思ったら、いつだって新しいコントローラを作る。それだけでいいのです。

https://postd.cc/how-dhh-organizes-his-rails-controllers/

5つの機能って何?という方は、ぜひ調べてみてくださいね。
7つのアクションと言われていることの方が多いかもしれません。

https://qiita.com/morikuma709/items/5b21e9853c9d6ea70295

7つのアクションを用いたコントローラの作成方法について少しだけ解説すると、、、
ある機能を実

元記事を表示

seed_fuでYour seed constraints contained unknown columns: `id`.と言われたのはそのテーブルのプライマリキーがidではなかったから

Fusicの賀来という者です。

https://fusic.co.jp/

## 解決したい問題

ある日、Railsアプリでseed_fuというgemでseedを流したところ、怒られました。

“`terminal
rails aborted!
ArgumentError: Your seed constraints contained unknown columns: `id`. Valid columns are: `user_id`, `group_id`, `group_uid`, `created_at`, `updated_at`.
“`

gemはこちら。

https://github.com/mbleigh/seed-fu

バージョンの確認です。
古くてちょいアレですが…。

“`
ruby:2.3.4
Rails 5.1.7
“`

seedファイルはこうなっています。

“`ruby
UserRegistration.seed do |ur|
ur.user_id = user.id
ur.group_id = group.id
end

元記事を表示

【Rails】画像アイコンを作ってみよう!【画像表示、加工】

## はじめに
どうも、春からエンジニア転職予定のkazuhiroです。
文系職からの転職であり、プログラミングは未経験ですが、
初学者目線で疑問に思った点などを、アウトプットしていきたいと思います。
※間違いや改善点などありましたらコメントいただければ幸いです。

## 本題
転職先のBossより、このような練習問題が出された。![スクリーンショット 2023-01-04 1.18.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083940/585419cf-e369-c754-7f01-065d661ba97a.png)

やってやんよ、と。
ユーザー一覧画面については、以前掲示板一覧画面を作成していたため、
同様の手順で作成することができたが、画像の表示方法で引っかかってしまう。
![掲示板.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083940/c8c22586-d21a-7a7a-8830-8d0

元記事を表示

Rails devise パスワードリセット後のリダイレクト先の指定

# 何がしたい?
ログイン画面の「パスワードを忘れた方」よりパスワードをリセットした場合に特定のページへリダイレクトしたい。
(deviseのデフォルトの場合はログイン画面へ遷移します。)

# 何が難しかったのか
なんといってもdeviseは簡単にログイン回りの機能を全て実装できる代わりに何が起きているのかわからないブラックボックス状態じゃないですか?
少なくとも僕は完全に理解したとは言い難いです。
今回パスワードリセットのメールを送った後に遷移するページを指定したいだけなのに異常に難しかったので記事にしておきました。

# 結論
いいから教えろ!

## 1. routesに追加
“`ruby
devise_for :users, controllers: {
passwords: ‘users/passwords’,
}
“`

## 2. Users::PasswordsControllerを作成
Devise::PasswordsControllerの継承を忘れずに。

“`ruby
module Users
class PasswordsController

元記事を表示

【個人開発】初学者が初めてRails7系でポートフォリオを作った際に意識したこと、感じたこと

## はじめに
:::note info
これが初の投稿なので何かお気づきの点等あればご指摘いただけると助かります。
:::
今回初めてプログラミングスクール内でポートフォリオをMVPリリースしたので、
実装の際に意識したこと感じたことについてまとめてみました。

特に私のような初学者の方向けに書いてみました。
少しでも実装の参考になれば幸いです。

ちなみにMVPとは
Minimum Viable Product、**顧客に価値を提供できる最小限のプロダクト**のことです。
要するに最小限の機能でサービスをリリースするということですね。
MVPリリースのメリットは
最小限の機能を備えた状態でユーザーからのフィードバックをもらうことで
**ユーザー目線で実装・改善が進められること**、**効率よくサービスの開発が行えること**です。

MVPの考え方については以下のサイト等を参考にしていただければと思います。

MVP(Minimum Viable Product)とは? 意味やビジネス上のメリットを解説

## 前提
私はプログラミングスクールのRUNTEQで半年ほど勉強をしてから開発に取り

元記事を表示

初心者がGitの使い方を学べて挫折を防ぐサービス”GIT USED TO”を自分のポートフォリオとして作ったので紹介させてください【Rails api/react/typescript/Docker/CircleCI/aws Fargate/cloudfront】

# はじめに
この記事を開いてくださりありがとうございます。
今回プログラミング初学者である自分のポートフォリオが完成したので紹介させていただこうと思い、今回投稿しました。
今回の記事はreadmeに記載した内容になりますが、お読みいただけたら幸いです!
まだまだ修正すべき点などが見つかるかと思いますが、よければぜひGIT USED TOを使ってみてください!

# GIT USED TO
![twitter_header_photo_2](https://user-images.githubusercontent.com/98959840/211242239-d0850567-f66e-4b3c-b231-0f0d8fc0be2f.png)
### GITトレーニングサービス
“GIT USED TO”とは、プログラミング超初心者を対象に現在エンジニアとは切っても切り離せない関係の分散型バージョン管理システム”git”がコマンドを通してどのような動きをしているのかを学び、gitへの恐怖心を無くして実務で使用できるようになるためにトレーニングをサポートするサービスです。
元々準備さ

元記事を表示

Firebaseいいね!と思ったけど、今やRailsを検討している件

以前firebaseよりもAmplifyがいいよね!
なんてタイトルで記事を書いたところ、思っていたよりも多くの方に読んでいただけて
本当にありがとうございます。

https://qiita.com/toto_inu/items/77e31e92f908a1fda8f7

しかし…

実は私、Firebaseをプロダクト利用したことありません!
ごめんなさい!!?‍♂️
(記事上もAmplifyに偏った記事であることは明記してますが…比較しているかのような紛らわしいタイトルでした)

そんなわけで、今回個人開発することを機にFirebaseを使ってみようと走り出したわけですが
1か月後にはRailsに乗り替えを検討しはじめている、と。

その変遷を軽くお話できればと思います。

:::note info
今開発しているサービスに少しでも気になった方は、是非こちらの記事をお読みください!
筆者が泣いて喜びます。
『[MokuPa](https://mokupa.com/)』
:::

https://note.com/oztoto/n/n44f7991fcc80

## Ampl

元記事を表示

【Ruby】Array.newを迂闊に使ってはいけないワケ…

(これに2時間気づかず時間を浪費した腹いせに、記事を書いています。)

# 配列内のオブジェクトを1つだけ変更したつもりが全部変わっている罠

“`ruby
nested_array = Array.new(2, [])
pp nested_array
# [[], []]
“`

なんてことはない、二重配列ですね。この1つ目の子ども配列に適当な値をpushしてみます。

“`ruby
nested_array = Array.new(2, [])
pp nested_array
nested_array[0].push(‘テキスト’)
pp nested_array
# [[], []]
# [[“テキスト”], [“テキスト”]]
“`

ちゃんと1つ目の子ども配列を指定したにも関わらず、両方の子ども配列に要素が追加されてしまいました。

### Array.newで複数作るオブジェクトは同じオブジェクトとして扱われる

“`ruby
nested_array = Array.new(2, [])
pp nested_array[0].object_id
pp nest

元記事を表示

RubyOnRailsでGoogleTextToSpeechを使う。

GoogleTextToSpeechに関する記事は、いくつかあるが、Rubyに絞ると良い記事がなく、比較的ハマったので、備忘録として、記録しておく。

## 結果として、こうなります。

“` Gemfile *.rb
gem ‘google-cloud-text_to_speech’, require: false
“`

“`*.rb
require “google/cloud/text_to_speech”

def self.generate_speech
# client生成
client = Google::Cloud::TextToSpeech.text_to_speech do |config|
# サービスクライアントを作成し、ダウンロードした秘密鍵を指定する。
config.credentials = “config/xxxxxxxx.json”
end
  # 設定値はこちら
speech = {
audio_config: {
audio_encoding: “M

元記事を表示

xcodebuild で躓いた時の解決方法(備忘録)

## 環境
Mac
Ventura

## やったこと
Xcode コマンドラインツールの version を確認しようとするが、以下の error が表示される。
“`
$ xcodebuild -version
xcode-select: error: tool ‘xcodebuild’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance
“`

Path がおかしいのかも?と思い、Path を確認。

“`
$ xcode-select -p
/Library/Developer/CommandLineTools
““

以下に変更する。
“`
$ sudo xcode-select -s /Applications/Xcode.app
“`

再度 version を確認

“`
$ xcodebuild -version
Xcode 14.2
Build version 14C

元記事を表示

(備忘録)Java概要

# Java
* 私の住んでる地域では、Javaによる開発需要(求人)がとても高く、それに合わせてJava学習の必要性を感じた。
* Javaは、求人数でもJavaScriptと並ぶほど多く、今後開発者として学んでおく必要性が高い言語だと思う。(PAIZA基準)
* そのJavaの特徴を、Rubyと比較しながら、覚えていきたい。

# Ruby on Railsの特徴

* 短期間でプロダクトのリリースが可能
* 言語学習のコストが低い
* スタートアップでよく使われる(リリースが早い為)
※Ruby on Railsの開発者であるDHHは、Ruby on Railsに関して、”Javaの典型的なフレームワークより10倍以上の生産性がある”とアピールしてた。

# Javaの特徴

* アプリケーションの仕様変更を行いやすい
* セキュリティが強固である
* 長期間にわたる保守・運用がしやすい
* 実行速度が速い
* 大手企業の基幹システムなど大規模開発に適した言語

# Rubyと比べてJavaが難しいと言われる理由

## ①覚えるルールやコードの記述量が多い
* Railsは、ア

元記事を表示

【Docker】docker-compose upした時にA server is already running. Check /product-register/tmp/pids/server.pid. エラー

## 1. 問題

“`docker-compose up“`し時に“`A server is already running. Check /product-register/tmp/pids/server.pid.
Exiting“` エラーが出て、立ち上がらなかった。

“`:console
/usr/local/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/usr/local/bundle/gems/net-protocol-0.2.1/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/usr/local/lib/ruby/2.7.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/usr/

元記事を表示

Ruby on Rails初心者の学習記録 Part1

# はじめに
Ruby on Rails初心者の学習記録です。
Railsを利用して、簡単なWebアプリケーションを開発できるようになることをゴールにしています。
※随時更新予定です。

# 1. Rubyの基礎を学習
Rubyも利用したことがなかったので、まずはRubyを簡単に勉強しました。
[Progate](https://prog-8.com/)というオンラインプログラミング学習サービスを利用しました。初心者がつまりやすい開発環境の構築が不要なので、手っ取り早くRubyの文法を学ぶうえでは、利用しやすかったです。

# 2. Railsインストール
1.である程度Rubyの雰囲気はつかめたので、次はRailsのインストール及び関連作業を行い、Railsを利用したWebアプリケーション開発の準備をします。
※利用OSはWindows11です。

## Rubyインストール
Railsをインストールする前にRubyをする必要があります。[「Rubyのインストールと環境設定」](https://www.javadrive.jp/ruby/install/)を参考にインストールしました

元記事を表示

qiitaテスト

![スクリーンショット 2022-12-19 13.54.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982835/4aaf8ef8-716a-52c6-824e-cec74fc99a82.png)
#はじめに

元記事を表示

Rails7構築 -その3- importmapでfontawesomeを導入

### ↓その2の続き

https://qiita.com/devzooiiooz/items/262f71e737f94738debf

bootstrap5の後にFontAwesomeを導入します。

### 参考
ほぼここのまんまです。

https://qiita.com/gazayas/items/9224b22ce6416a624f33

# yarnでfortawesomeをインストール

“`sh:
$ yarn add @fortawesome/fontawesome-free
“`

### インストールしたfontawesomeをimportmapにpinします。
“`sh:
$ ./bin/importmap pin @fortawesome/fontawesome-free
“`

### config/importmap.rbを変更
fontawesome.js→all.jsに変更

“`rb:importmap.rb
# pin “@fortawesome/fontawesome-free”, to: “https://ga.jspm.io/n

元記事を表示

【Rails,Docker】Zeitwerk::NameError: expected file

ローカルで動いたDocker+Railsアプリを本番環境で動かそうとしたところ、Webコンテナ(nginx)は立ち上がったが、appコンテナ(puma)のステータスがexitedになる状況が起こった。
docker logs で確認したところ、以下のようなエラー分が検出された。
“`:log
Zeitwerk::NameError: expected file /app_name/app/controllers/function.rb to define constant …
“`
ZeitwerkはRails6.01から標準となっている定数の自動読み込み機能で、ファイル名がそこで定義されている定数と一致していない場合にそれを検出してエラーを吐く。
今回の場合、コントローラーに定義する関数が長くなり可読性を損なうため、ファイルを別のファイル(function.rb)で定義して、includeでコントローラに取り込んでいる。そのため、ファイル名と定数の不一致によりこのようなエラーが出ていると考えられる。

# 対処法
config/application.rbに“`conf

元記事を表示

ビューを使ってエラーメッセージを表示させる

# このエラーメッセージを真似してみる。
“`html
<% if @article.errors.any? %>

<%= pluralize(@article.errors.count, "error") %>が原因でこの記事を保存できませんでした

    <% @article.errors.each do |error| %>

  • <%= error.full_message %>
  • <% end %>

<% end %>
“`
### 出典
https://railsguides.jp/active_record_validations.html#%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E3%83%93%E3%83%A5%E3%8

元記事を表示

Rails7 -その2- importmapでbootstrap5の導入

### ↓その1の続き

https://qiita.com/devzooiiooz/items/5f12c0601acd2ae9b5d9

## Rails7はimportmap
Rails7はjavascriptアプローチのデフォルトがimportmapになったので、Rails6でのjavascript bundlerであるwebpackerではなくなった。(指定することはできる)

https://zenn.dev/takeyuweb/articles/996adfac0d58fb

デフォルトでapplication.html.erbは以下のようになっている
“`erb:views/layouts/application.html.erb
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
“`
stylesheet_link_tagはapp/assets/stylesheets/にあるapplicati

元記事を表示

(備忘録) Githubにてうっかりと削除したレポジトリの復元方法

# 概要

* Githubにて、過去に作成、PUSHしたレポジトリを削除してしまった後、復元する方法を整理しておきたい。
* 削除済みのレポジトリの復元方法は他にもあるが、今回は、Githubサイトでの復元方法をメモっておきたい。

# 手順

* ①Githubサイトにログインし、右上にある自分のアイコンをクリック→Settingをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843483/c461c569-df7b-5eb0-4265-1a64bf789d07.png)

* ②左メニューのレポジトリをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843483/5b04dbb2-8d65-8c9e-34e7-9b59f168bcb9.png)

* ③Deleted repositoriesをクリックすると、過去に削除したレポジトリのリストが出てくる。

元記事を表示

中間テーブル

# 中間テーブルとは
– テーブルとテーブルの多対多の関係を表す関連テーブル

– 中間テーブルを使うことで多対多の関係を一対多の関係にできる

# 中間テーブルを使う理由
– 空のカラムができてしまいエラーの原因となるのを防ぐため

# 中間テーブル
例えばusersテーブルとcoursesというテーブルがあったとする

|id|user|
|—|—|
|1|a|
|2|b|
|3|c|
|4|d|

|id|course|
|—|—|
|1|国語|
|2|数学|
|3|理科|
|4|社会|
|5|英語|

中間テーブルを使わない場合以下の様になってしまい、冗長になってしまう。
空のカラムもできてしまいエラーの原因となる。

usersテーブル
|id|user|course_id1|course_id2|course_id3|course_id4|course_id5|
|—|—|—|—|—|—|—|
|1|a|国語|数学|理科|社会|英語|
|2|b|国語|理科|社会|
|3|c|国語|数学|理科|社会|
|4|d|英語|

co

元記事を表示

OTHERカテゴリの最新記事