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

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

URLパラメータ(クエリ文字列)は文字列で取得されますよ。

先日会社でサービスの開発をしている時、URLパラメータを取得しているのに読み込まれていない事案が発生しました。
案外ミスしがちなポイントだったので記事に残します。(タイトルが結論ですが。)

# やりたかったこと
URLパラメータをインスタンス変数に入れてviewで表示内容を変えるというものです。

“`controler.rb
@user_type = params[:id] # URLパラメータの値を取得
“`

“`view.rb
<% if @user_type == "1" %>
<%= link_to %>
<% end %>
“`

# はまりポイント
はまりポイントというほどでもないですが、ちょいはまりくらいです。
URLパラメータは文字列型で取得されることです。
ですので「よし、id=1のパラメータを取得したぞぉ」といって“`if @user_type == 1“`と書いても認識されないわけです。

# まとめ
「URLパラメータは全て文字列で取得される。IntegerやArrayで使用したい場合は都度、変更する必要があ
る。」
URLパラメー

元記事を表示

テックキャンプ現役受講生のアプリ開発1日目

みなさんこんにちは!今日は要件定義とDB設計をやっていました(+読書)。学んだことのアウトプットします。本日は2つです。

# 起業家の思考法(平尾著)を読んで学んだこと
起業アイデアの出し方について書かれた本です。アプリ開発のアイデア出しに応用できるかなと思って読んでいました。主に応用できるアイデアは2つ。

1、目的を見つけ、現状を分析して、それらの差分が解決すべき課題である。
上記の文脈に合わせて、一つアイデアを出してみます。
例えば、フードロスは0の方がいいよね(目的)。⇨日本ではフードロスが年間○千万トンある(現状)。⇨賞味期限ギリギリの食材を廉価で流通させる市場を作ればいい(課題&解決アイデア)。というような感じです。今回は何らかの問題の解決を、アプリでしようと思います。

2、自分らしさ、優秀な手法、逆説(意外性)の3つを掛け合わせたものが、素晴らしい解である。
上の3要素が合わさらないと、素晴らしい解決策にはならないということです。
・自分らしさとはそのまま個性のこと。
・優秀な手法とは、世に認められている素晴らしいやり方やこと。
・逆説はそのまま
自分らしさだけを全面

元記事を表示

ActiveRecord オブジェクトを dup メソッドでコピーする場合は、インスタンス変数もコピーすることに注意する

# バージョン情報

“`shell
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]

$ bin/rails -v
Rails 7.0.3
“`

# 内容

ActiveRecord オブジェクトの属性 (attributes) を引き継いだ別のオブジェクトを作成し、データベースに保存したい場合に [ActiveRecord::Core#dup](https://api.rubyonrails.org/classes/ActiveRecord/Core.html#method-i-dup) を使用することがある。この場合、たしかに属性は引き継がれるが、同時に [Object#dup](https://docs.ruby-lang.org/en/3.1/Object.html#method-i-dup) の振る舞いにより**インスタンス変数の値も引き継ぐ**。

https://docs.ruby-lang.org/en/3.1/Object.html#method-i-dup よ

元記事を表示

TECH CAMP 10日目 ~テストコード~

# 学習内容
– テストコード
`visit`指定したビューファイルに遷移できるメソッド
`fill_in`入力フォームに指定の値を入力することができるメソッド
`have_content()`()に書いた文字列があるかどうかを判断するマッチャ
`have_no_content()`()に書いた文字列が存在しないことを確かめるマッチャ
`hover`特定の要素にカーソルをあわせたときの動作を再現できる
`find().click`()内のリンクに実際にクリックができる
`change`expect{ 何かしらの動作 }.to change { モデル名.count }.by(1)と記述することによって、モデルのレコードの数がいくつ変動するのかを確認できる
`current_path`現在いるページのパス

元記事を表示

MySQLの “The server quit without updating PID file” エラーの対処法

以前rails sをしようとしたときに、The server quit without updating PID file のエラーにハマったので対処法を紹介します。
自分の場合は、mysqlを再インストールし、パスワードを設定したら無事に解消できました。
## 1.mysqlを再インストール
再インストールについては、下記の記事を参考にしました。
https://gonzaemon.site/posts/2019/10/04/_2.html

基本的には、
“`
brew uninstall mysql
brew install mysql
which mysql
“`
すれば、再インストールできます。
そして、再インストールしたらいけるかと思いきや
“`
‘Access denied for user ‘root’@’localhost’
“`
と言うエラーが出てしまいました。
この対処法としては、パスワードを設定すれば解消できると思います。

## 2.パスワードを設定

自分の場合は、この記事を参考にしました。
https://webkaru.net/mysql/mys

元記事を表示

Railsの絞り込みルーティング検索

### 「rails routes」のキーワード検索方法

`rails routes`を実行したときに、目当てのルーティングを見つけるのにいつも時間がかかっていました。
が、下記のコマンドを実行するとキーワードで絞り込み検索できるということを知りました!!

“`
$rails routes | grep users

#「users」部分は好きなキーワードに変えてください!
“`

ちなみに、grepは検索するときに使うLinuxコマンドらしいです!

元記事を表示

【Rails】コントローラーにたくさんコードを書いてしまった・・・そんな時はモデルに処理を寄せよう!

どーもへっぽこです。
コントローラーって便利ですよね、ルーティングしてアクション呼び出すだけでその中の処理を走らせることができる。
ついつい便利で・・

“`ruby
def A
a = 3
b = 2
c = a + b

return c
end

def B
a = 4
b = 2
c = a + b

return c
end

def C
a = 7
b = 6
c = a + b

return c
end

def D
a = 1
b = 9
c = a + b

return c
end

def E
a = 6
b = 2
c = a + b

return c
end

“`

たくさんコードを書いてしまう。。
しかし、こんなコントローラーのことをなんと呼ぶか知ってますか?

![topics_46_4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007139/7a3b

元記事を表示

【Linux EC2】PIDではなく、プロセス名で kill するコマンド

# プロセスをPIDではなく名前で kill する
結論こちらで可能(Amazon Linuxで動くよ!)

“`bash: プロセス名を指定して kill できます
pgrep -f ‘プロセス名’ | { read v ;kill -9 $v; }
“`

## 使い方
まずはこちらで殺したいプロセスの名前を調べましょう。

“`
ps aux | grep プロセス名
“`

railsで unicorn のプロセスを殺したい場合はこんな感じ。

“`bash
ps aux | grep unicorn
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69647/e3fe22ea-b407-1b86-cb96-f2c9d59f47af.png)

## 時間の右に書いてあるのがプロセス名
今回の場合は `unicorn_rails` になるのですが。
`unicorn_rails` で絞るとその下にある worker[0]~[3] も引っかかってしまいます。

元記事を表示

rails new でDBMSにmysql使用しようとしたら失敗した時の解決メモ

## rails new アプリ名 -d mysql で発生した ERROR! The server quit without updating PID file

### やったこと

`$ rails new sample-app -d mysql`で新規プロジェクトを作成しようとした

### エラー

以下のエラーでプロジェクトの作成ができなかった

“`
Starting MySQL
./usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザーMBP.err: Permission denied
rm: /usr/local/var/mysql/ユーザーMBP.pid: Permission denied
2020-03-29T03:04:45.6NZ mysqld_safe Fatal error: Can’t remove the pid file:
/usr/local/var/mysql/ユーザーMBP.pid.
Please remove the file

元記事を表示

[Rails] 個人的にとてもわかり易かったモデルにメソッドを移行(定義)する方法

### はじめに
ファットコントローラーを回避するためにモデルにメソッドの定義する方法を、調べても調べても理解出来ず諦めていましたが
先日個人的には超わかりやすい方法教えて頂けたため記事にしています。
簡単なものを書き出せるようになるだけでインスタンスメソッドとかクラスメソッドとかがほんのちょっと理解できるようになりました!

おまけ:クラスやインスタンスについてはこちらでまとめてみました!

https://qiita.com/nmwkhl/items/c521ab9398906ef30961

### メソッド化のメリット
同じ記述を何度もしなくて済む
誰もが同じ効果を発揮できる
セキュリティ問題  など様々あります

特に最後のセキュリティ問題については重要で
“`erb
<% if @user == current_user %>
<%= @user.email %>
<% end %>
“`
この様な記述があった際に
仮にタイポして`if @user = current_user`にしてしまったとします。これはただ代入しているだけの記述になってしまい

Railsのテストコードの書き方について

## 概要
こんにちは。shunです。前職ではテストコードを書いたことがなかったため、今回は自分用のメモもかねてRailsでのテストの書き方について説明していきたいと思います

## 前提
– テストを書いたことがない
– Ruby 2.6.6
– Rails 6.0.5
– Rails標準のテスティングフレームワークであるMinitest(後述)を使います
– テストを書いたことない人向けなので今回はRspecは使いません
(今後Rspecについての記事も書いてみたいです)

## そもそもテストって何?なんでテストが必要なの?
テストはプログラムが想定通りの動きをするか確認するためのものでここでは3種類のテストを取り上げます
– Unit test(単体テスト)=モデルのテスト
– Controller test(機能テスト)=コントローラのテスト
– Integration test(結合テスト)=全体の動作の流れのテスト

また、テストコードを書く理由としては主に

– リファクタリングを実施しやすくするため
– コードの品質を高めるため
– テストを自動化するため
– バグを

[Rails] ポケモンで例えるクラスとインスタンス

### はじめに
いろいろな記事を参照しても理解が殆どできなかったクラスとインスタンスですが、
メソッドについて考えるタイミングでようやく少しだけ理解が出来たのでまとめてみました。
間違っていたらご指摘お願いいたします。

### クラスとインスタンスの違いついて(理解できている部分のみ)

クラス:PostやUserなど大文字(クラス名)のこと、よく設計書とか言われます。大元の部分といったところでしょうか?

インスタンス:@posts, post, @userなどのPostやUserなどのクラスから作り出したもの
→ 例)`@post = Post.new`とかよく書くと思いますが、ここの`@post`はPost(クラス)から作り出したものなのでインスタンスということになります。なのでもちろん`post = Post.new`の`post`もインスタンスです。

### ポケモンに例えてみる

クラス:ポケモンクラス
ポケモンを作り出してくれる設計図です、卵から孵るんじゃないんです

インスタンス:今回はポケモンクラス(設計図)から

Azure App Service における Redmine の DevOps

## 概要

最近個人的に [Azure App Service](https://azure.microsoft.com/ja-jp/services/app-service/) で Ruby on Rails アプリである [Redmine](https://redmine.org) を稼働させる DevOps プロジェクトに取り組んでおり、いくらか形になってきたので紹介します。

https://github.com/yaegashi/dx2devops-redmine

このプロジェクトで使用する Redmine は、ある程度新しければどのバージョンでも対応できます。先日 v2.1.0 が出たばかりの [RedMica](https://www.redmica.jp) でも大丈夫です。

この記事では、今回 App Service で稼働させた Redmine アプリのコンテナ仕様とデプロイ手順について説明します。上記の GitHub プロジェクトの README.md にも英語で書かれている内容ですが、この記事には Rails アプリの DevOps の設計や実装に関連する内

6月末までにオリジナルアプリケーション開発します。

# アプリ開発を公開しようと思った経緯
皆さんこんにちは。harukiと申します。早速ですが、当方の簡易な経歴とアプリ開発の過程を公開するに至った経緯を記述しようと思います。

#### 私の経歴
・20年卒の元地方銀行員。約2年で退職。⇨テックキャンプに入校⇨カリキュラムが大方終了し今日からオリジナルアプリ作成
となっております。

#### アプリの開発過程を公開する目的
・過程をアウトプットすることで、自分の学びになると思ったため
・今後、初めてアプリ開発する人何かの参考になるかもしれないため
・開発過程を公開することで、モチベーションを高めるため
・期日を決めるため

上記のような目的で、テックキャンプ受講生のアプリ開発過程を公開しようと思ったわけです。一言でまとめると、自分にプレッシャーをかけるためにアプリ開発過程を公開します。

# 使用する言語
・ruby 2.6.5
・HTMLやCSS、Javascript

# 開発するアプリ内容
ここからが本題です。
初めて開発するアプリは「議論するための場所を提供するプラットフォーム」にしようかと思います。
付ける機能大まかに

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

今回作ったもの
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