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

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

【Rails7】Rails7 Hotwire × TailwindCSS SPA風ポートフォリオor個人開発アプリの下地を作ろう!(環境構築・投稿機能作成まで)

## はじめに
未経験からエンジニアに転職して、2ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。
その中で、RailsにHotwireを使用して作成したアプリが、
+ 未経験からエンジニアに転職するためのポートフォリオ
+ 個人開発のアプリ

に向いているのではないかなと思いました。

## なぜポートフォリオ or 個人開発に向いているか
**エンジニア歴2ヶ月の弱弱エンジニアの意見なので、あくまで参考程度に考えていただきたいです。**

**結論**
**フロントエンドのコードをほとんど書かなくても、SPA(シングルページアプリケーション)風のサービスを比較的簡単に作成できるからです。**

比較的というのは、VueやReactなどのフロントエンドのフレームワークを使用するより、という意味合いです。

自分自身、エンジニアに転職する時に完全SPAのポートフォリオを作成しました。
転職活動の際には、
**未経験でここまで作りきることができるのはすごい**
というような評価をもらうことが多くありました。(あくまで未経験にしては、ということで

元記事を表示

Ruby on Rails テスト環境を本番環境にしてみた

# 記事の背景
Ruby on Rails本番環境で再現していたバグをテスト環境で確認する為、テスト環境を本番環境に変更してバグ修正を試みようと思ったが、テスト環境を本番環境にするのにかなり詰まった為、記事を書いてみました。

## まず、環境を変えるとはどういうことか??
テスト環境では環境変数testで実行していたものをproductionに変える(**RAILS_ENV=test**を**RAILS_ENV=production**に変える)

## 詰まったこと
1. テスト環境で**RAILS_ENV=production**が実行出来ない。
2. コンソールが使用が出来ない。
3. テスト環境のデータベースが反映されない。
4. アセットプリコンパイルしてもcssや画像が反映されない。

# 各事象と解決方法
## ①テスト環境で**RAILS_ENV=production**が実行出来ないの解決方法
### 事象
下記コマンドを打つと、
“`
$ bundle exec rails assets:precompile RAILS_ENV=production
“`

元記事を表示

TECH CAMP12日目 ~ルーティングのネスト~

# ルーティングのネスト
– ルーティングのネストとは、段階に分けてルーティングを記述すること

__書き方の例__
“`ruby
Rails.application.routes.draw do
resources :tweets do
resources :comments, only: [:create]
end
end
“`

## メリット
– ルーティングの記述をネストさせるとURLの階層構造ができる。
上記のようにルーティングした場合のURL
`/tweets/id(数字)/comments`
このようにどのツイートに対してのコメントなのかが一目でわかる。

– パラメーターに親要素のカラムを入れることができる
ちょっと分かりにくいので使わなかったらどうなるか↓

### 使わなかったら…
例)
“`ruby
Rails.application.routes.draw do
resources :tweets
resources :comments
end
“`
“`html.erb
<%= form_with 'hoge', co

元記事を表示

Gitでプロジェクトを管理するDay3

今日はアプリ開発でタスクをまとめました。具体的には、gitでissueを作成し、今後の開発を管理していきます。issueで利用できるチェックボックについて紹介します。

# gitでチェックボックスを作成するには?
チェックボックスとは↓のようなもの。チェックをつけたり外したりできます。
![スクリーンショット 2022-06-17 21.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707093/01cefcb1-62e7-fcbe-2aba-6837d301bc08.png)
記述の仕方
“`
– [ ] ここに文章ーー
– [x] 作成時にチェックをすでに入れていたい場合はこのように記述
“`

以上でチェックボックスを作成できます。ちなみにQiita上でも
– [ ] 同様の記述でチェックボックスを作成できます。 
– [x] チェック済みボックスを作成。

以上

元記事を表示

Rails チャット機能

## はじめに
[前回、Railsアプリケーションにマッチング機能を実装しました。](https://qiita.com/gobtktk/items/5caf074209faf31cae4a)今回は、マッチング成立後のユーザー同士のチャット機能を実装していきたいと思います。

### 実装環境
Rails7.0.2
Ruby3.1.0

## メッセージ機能の仕様
ユーザー同士が、「お気に入り!」評価をしている場合(マッチング成立時)に限り、チャットができるようにします。
ユーザーは複数のチャットに参加することができます。またチャットは、2人でするものとします。

## 実装の流れ
1. マッチング成立ユーザーページの実装(viewとcontroller)
1. チャットルーム用のテーブル(chat_rooms)を作成。
1. 中間テーブル(chat_room_users)を作成
1. ルーティングの作成
1. コントローラーの作成

## マッチング成立後、ユーザーページの実装(viewとcontroller)
### 1.ルーティングの設定
~~~ruby:routes.rb
R

元記事を表示

Rails マッチング機能の実装

## はじめに
Rails でアプリケーションを作成した際に、学んだことの復習と、知識の整理のために投稿します。
### 開発環境
rails: 7.0.2
ruby: 3.0.1

## マッチング機能の仕様
ユーザーは、自分以外のユーザーであれば、何人でもlikeとdislikeすることができますし、逆もまた然りです。

## ER図
テーブルと関係性をわかりやすくするため、ER図を作成します。

スクリーンショット 2022-04-18 16.39.28.png

### likesテーブルのカラムについて
– from_user : 誰からの評価なのかを判別するためのカラム
– to_user : 誰に対しての評価なのかを判別するためのカラム
– status : 評価結果(like or dislike

元記事を表示

リプライ機能を実装するには?Day2

オリジナルアプリ開発Day2、2本目の記事です。自分のメモのために書いています。

# RDB構造でリプライ機能実装する方法は?
Twitterやyoutubeのコメント欄のように、コメントに対して、コメントをする機能をreplyと言いますが、その機能をどのようなRDB設計で再現すればいいのか考えていました。

自分が考えたものも含めて、解決策は5つ。

## 先人たちが見つけてくれた解法
・隣接リストモデル(ナイーブツリー).
・経路列挙モデル
・閉包テーブルモデル
・入れ子集合モデル

よく纏められたサイトがあったのでそちらをご紹介します。

https://www.wantedly.com/companies/tutorial/post_articles/299434

https://www.slideshare.net/kamekoopa/ss-27728799

自分ならば、上記4つの解法の中から1つ選ぶとしたら、閉包テーブルモデルを採用すると思います。

## 自分が考えた解法
コメントテーブルに対して、コメントのIDを外部キーとしたリプライテーブルを作成します。これで、

元記事を表示

TECH CAMP11日目 ~中間テーブル~

# 中間テーブルとは
・多対多の関係性があるテーブルの間に設置するテーブル
・接続する2テーブルの外部キーをもつ

分かりやすい記事↓
https://qiita.com/ramuneru/items/db43589551dd0c00fef9

## 注意
テーブル間にアソシエーションを書く時、
例)usersテーブル、tagsテーブル、tweetsテーブルがある時、

Userモデルには
`has_many :user_tweets`
`has_many :tweets, through: :user-tweets`
の順番でかく。
`has_many through`で経由するテーブルとのアソシエーションを先に記載しないとエラーになる。

元記事を表示

DBってどんな種類があるの?Day2

# 今日の問題
オリジナルアプリ開発のday2です。今日は要件定義の作成、DB設計をやっていました。Twitterのようなフォロー機能を作る時どのようなDB設計を作ればいいのかわからず、DB設計について調べました。今回はDBについてまとめます。

# DBは3種類ある
テックキャンプではRDB(リレーショナルデータベース)についてしか学びませんでしたが、DBは主に3種類あるそうです。

### 1、階層型データベース
1つの頂点(親)が存在し、その下に複数の子供、孫が結び付けられている構造です。常に親とこの関係は「親1人対子1人」か「親1人対子多」の関係しか持てません。
![絵-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707093/98e7b1ef-7995-1f23-b12d-6981cc154667.jpeg)
#### メリット
・「各ノード(親や子、孫などを示している丸1つ1つのこと)へのルートが決まっているので、処理速度が早くなる」というもの。
#### デメリット
・データの追

元記事を表示

database.ymlを編集する事で変えられるもの

Q.
database.ymlを編集する事で何が変わるのか?

A.
運用環境を変えられる。database.ymlで表記されている単語は下記の意味である。
development:開発
test:テスト
production:本番

Q.
そもそもなぜ変える必要があるのか?

A.
開発環境では、バグを見つけやすくするツールを導入するために必要
本番環境ではバグを見つけやすくするツールが導入されていると余計な処理が増え、処理に時間がかかる事を防ぐため

元記事を表示

【Rails】docker-compose 基本コマンド

railsコマンド

##### モデル作成
“`
docker-compose run web bundle exec rails g model モデル名 カラム
“`
モデルは単数系で頭文字は大文字٩( ‘ω’ )و

##### マイグレーション
“`
docker-compose run web bundle exec rails db:migrate
“`

##### コントローラー作成
“`
docker-compose run web bundle exec rails g controller posts new
“`

その他

##### build時にキャッシュを使わない
下記コマンドは変更内容が反映されない時に使います
“`
docker-compose build –no-cache
“`

##### dockeの中に入る
dockerのコンテナ名は docker psで確認!
“`
docker-compose exec #{container} bash
“`

##### Gem一覧確認コマンド
“`
d

元記事を表示

nested_attributesの中のattr_accessorが時々callbackを発火させない件

# TL;DR

“`rb
class User < ApplicationRecord has_many :comments, dependent: :destroy accepts_nested_attributes_for :comments, allow_destroy: true end class Comment < ApplicationRecord attribute :foo, :string after_validation do p "foo: #{foo}" end end ``` ```rb User.last.update(comments_attributes: { id: 1, foo: 'Foo' }) => true
“foo: Foo”
# この時`comment`の`updated_at`も更新されること
“`

# 発端
とあるプロジェクトがコメントの添付画像の削除機能が必要でしたが、普通に`attr_accessor :img_destroy`でフラグ置きました。
ただし実装したところ、「コメント変更

元記事を表示

rails コントローラ別 アクション別に別々のlayoutを読み込む方法(自分用)

https://www.javadrive.jp/rails/template/index3.html#section3

元記事を表示

【随時更新】RSpec でハマったエラー

### はじめに
初心者ですので、言葉足らずなところや間違えがあるかもしれません。
お気づきになりましたら、ご指摘いただけると嬉しいです。

# ログインできない

##### エラーコード
“`
Failure/Error:
expect(current_path).to eq(root_path)

expected: “/”
got: “/users/sign_in”

(compared using ==)
“`
“/”に遷移しようとしたけど、結果は”/users/sign_in”ですよ。
つまり、遷移できずにログインページのままになりエラー。
##### ソースコード(一部)
“`ruby:system/users_spec.rb
#省略

# 正しいユーザー情報を入力する
fill_in ‘email’, with: @user.email
fill_in ‘password’, with: @user.password
# ログインボタンを押す
find

元記事を表示

「まだRailsでstrftime使ってるやついる?」「いねえよなぁ!!?」【日時のフォーマットをja.ymlで管理する】

※ 結論だけ知りたいという人は[解決法](#解決法)から見てください

「まだRailsでstrftime使ってるやついる?」

「いねえよなぁ!!?」


はい、使ってます。

`strftime`を使用して、日時をフォーマットする際
“` erb:View

<%= @model.time.strftime('%Y年%m月%d日 %H時%M分') %>

“`
のように毎回記述する必要があり
「いちいち指定しなくても同じ形式でフォーマットしてほしい」
「フォーマットをまとめて管理したい」
といった悩みに苦しめられてきました。

「仕方ない」と諦めていたこの悩み…解決する方法を実は見つけてしまったのです。

私みたいに諦めてstrftimeを使っているそこの貴方、今まさにstrftimeを使おうとしているそこの貴方。
「もっと早く気づいていれば、もっといい感じにプロダクトを作れた」
と思うその前に、是非参考にしてみてください。

# strftimeとは?
strftimeは、日時のデータを指定したフォーマット文字列に変換で

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事