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

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

MySQLが起動しない(Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2))

#開発環境
– Ruby 2.5.8
– Rails 5.2.1
– MySQL 8.0.22

#新規開発をしようと「rails db:create」をした時のこと・・・
ポートフォリオの大方の設計が出来上がってきたので、アプリの大枠だけでも作成しようと`rails new`をして新規アプリを作成し、`rails db:create`でDBを作成しようとしたところ、エラーで止まった。

“`terminal
rails db:create

Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
Couldn’t create ‘myPF_development’ database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
“`

元記事を表示

LaravelでRailsみたいなデバックがしたい。(スクール卒業生向け)

#概要
巷にあふれる某スクール卒業生。
彼らがスクールで学ぶのはRuby on Railsなのだが他人との差別化を図る上でLaravelを用いてポートフォリオを作成する方々を散見する。

彼らがスクールで学んだ、デバック方法は「binding.pry」ほぼ一択。

Laraveでよく見かけるデバック方法は,var_dump(); や dd(); でちょっとモヤモヤしてる方向けの記事になります。

##結論
「binding.pry」みたいなことはLaravelでも出来る!!

“`
eval(\Psy\sh());
“`

処理を止めたいところに「binding.pry」のように書いて、ターミナルで確認するだけです。

恐らく、この説明でスクール卒業生は使いこなせると思います。
「大金払ってRuby on Railsを学び、実務で使うのはLaravelなんですか?」
という意見もあると思うのですが、個人的には自分が卒業生でlaravelエンジニアというのもあり応援したい気持ちです。

元記事を表示

duplicate key value violates unique constraint “XXXXXX”の解決方法

ruby “2.6.4
rails”, “~> 6.0.0”
postgressql

“`ruby
bin/rails db:drop
“`
“`ruby
bin/rails db:create
“`
“`ruby
bin/rails db:migrate
“`
“`ruby
bin/rails db:seed
“`

あとは
ファイル名、英語のスペルが間違えていないか確認

元記事を表示

Railsで検索機能を導入してみた

#はじめに
RailsでWebサービスを作っていく際、データベース内を検索する機能をつくるのに一工夫が必要でした。
そこで、どのようにして検索機能を搭載したかを記していきます。

#環境
MacOS Catalina 10.15.7
Rails 5.2.4.4

#手順
ヘッダー部分に検索機能のバーを搭載していきます。

“`header.html.erb

<%= form_with url: "/search", method: "get", local: true do |form| %>
<%= form.search_field :keyword, placeholder: "作品・ユーザーを検索", value: @keyword, size: "30" %>

<% end %>

“`
![スクリーンショット 2020-12-06 8.32.27

元記事を表示

Docker開発環境でdocker-compose run web bundle exec erb2slim app/views/layouts/ –deletを実行したらエラーが出た

Docker開発環境で構築したアプリにSlimを導入したのでRails newした時にできた“`.erbファイル“`をSlimに変更しようと思い、“`docker-compose run web bundle exec erb2slim app/views/layouts/ –delet“`を実行したところ下記のエラーがでた

“`
bundler: command not found: erb2slim Install missing gem executables with `bundle install`
“`

何をわけわからんこと言ってんねん!いれたやろがい!!!ってキレそうになりながら冷静になってみるとDockerのビルド?をしていないことに気づいたので下記を実行

“`docker-compose up –build“`
無事にDockerが起動したらDockerをもう一度止めて、
“`docker-compose run web bundle exec erb2slim app/views/layouts/ –delet“`を実行!!

元記事を表示

いつ送信されたものなのか「○分前」と表示させたい

#はじめに
 チャットの中で、送信された時刻だけでなく、それが今からどれくらい前なのか簡単に表示させることができないかと考え、調べたものをまとめておく。
 調べるまでは、今の時刻から、送信された時刻を引くのかなぁと漠然と考えていたが、超絶便利なメソッドがあった。

##○分前と表示させる方法

“`erb
<%= time_ago_in_words(message.created_at) %>前
“`
`message`の部分はコントローラーから渡しているインスタンス変数が入る。
`time_age_in_wordsメソッド`、中学英語みたい。

##終わりに
 アプリケーションを作っていて気づいたが、時間に関するメソッドや機能ってたくさんあって便利!英語が苦手だったけど、プログラミングに出てくる英単語って中学生でもわかるレベルのものがたくさんあって、英語アレルギーが出ないし、逆にわかるから楽しい!!単語一つのメソッドもたくさんあるが、前置詞がついて痒いところに手が届く系のメソッドも面白い。

元記事を表示

Ruby初心者が環境構築するため rbenv、RVM、bundler、gem 等をレポート

## 背景
Ruby を始めるにあたって環境構築をしようとしたところ、rbenv、RVM、bundler、gem、etc.. のよう言葉が出てきて混乱しました。
ある程度理解できたと思うのでまとめます。

## Rubyのバージョン
ルビーのバージョン2.3で作ったアプリは、ルビーのバージョン2.6が入った端末だといじれない。
ルビーのバージョン2.6で作ったアプリも同様にルビーのバージョン2.3が入った端末だといじれない。
一つの端末に複数バージョンのRubyは共存できない。(rbenv、RVMとか使わない場合)

## rbenv、RVM とは
入れると1台の端末で異なるバージョンのRubyが共存できるようになる。
パッケージ管理ツールとして紹介されている。

▼使用例
・状況
去年から開発してるアプリAのRubyバージョンは2.3
来月から開発するアプリBのRubyバージョンは2.6を使いたい

・問題点
アプリAとアプリBを同時に開発したいが一つの端末に複数バージョンのRubyは共存できない、どうしよう・・

・解決方法
rbenv、またはRVMを使うと一つの端末に複数バージョ

元記事を表示

Docker環境のRuby on RailsアプリをCircleCIで自動ビルド&テスト(RSpec)する方法

# はじめに

こんにちは、Masuyama です。

私は [CircleCIのユーザコミュニティ](https://circleci.connpass.com/)の運営に参画させていただいているので
本記事では、以下のような環境でRuby on Railsアプリの自動ビルド&テストを実現してみたいと思います。

– コンテナ環境:Docker (docker-compose)
– フレームワーク:Ruby on Rails
– テスト方法:RSpec
– CI/CDツール:CircleCI

CircleCI、Docker を使ったことが無い方でも理解できるように解説しているつもりですが
質問がありましたら気軽にコメントをいただければと思います。

# CircleCIとは?

## 概要

CircleCIはCI/CDをクラウド上で行えるツールであり、**ビルド・テスト・デプロイ**の3つを自動で行なえます。

どのような環境でビルド・テスト・デプロイを行うかは config.yml というファイルを作成して指定します。
プロジェクト直下に .circleci というフォルダを作

元記事を表示

【Rails】マッチングアプリのDMフォームを作成する方法

#環境
macOS 10.15.7
Rails 5.2.4.4
Docker 19.03.13

#前提
●ログインユーザーと特定のユーザー同士のみがDMページへ移動してやり取りを行うことを前提
●ログインユーザーがDM中のユーザーの一覧が閲覧できるページを作成
●メニューバーからDM中のユーザーの一覧への移動が可能

#特定のユーザー同士がやり取りできるDMページの作成
まずは特定のユーザー同士がやり取りできるDMページの作成をします。
##モデルの作成
UseRoomテーブルを作成してカラムは以下のようにします。

“`ruby:terminal
rails g model UserRoom user_id:integer room_id:integer
“`
Roomテーブルを作成します。

“`ruby:terminal
rails g model Room
“`
messageテーブルを作成してカラムは以下のようにします。

“`ruby:terminal
rails g model Message user_id:integer room_id:integer m

元記事を表示

Railsのポリモーフィック関連付けのテストを考えてみた。

## なぜ今回の記事を書いたか。
Railsの場合、ポリモーフィック関連付けを行なった際に紐づくモデルに対して実装しなければいけないメソッドの強制が行われません。そのため、メソッドの定義を忘れた場合エラーが発生します。
ただ、実装する際に忘れるメソッドのテストを書くのは難しいのでは? と個人的に思いました。
そのため、良し悪しは別として僕が実装したテストを記載します。

他に良い方法があれば是非教えてください!

## 実装したモデル
今回の記述に関係ない箇所に関しては省略しています。

“` app/models/notification.rb
class Notification < ApplicationRecord belongs_to :event, polymorphic: true ・ ・ ・ end ``` ``` app/models/comment.rb class Comment < ApplicationRecord has_many :notifications, as: :event, dependent: :destroy ・

元記事を表示

【Rails】Ridgepoleの導入方法,利点と運用をちょこっと楽にするポイント

# はじめに

Rails標準の`migration`ファイルで運用していると、下記のような問題がおきてしまいます。

– **チーム開発でmigrationがコンフリクトする。**
– **開発が初期段階でschema情報が頻繁に変わる。**
– **マイグレーションファイルが多くなってしまい、管理が大変。**
– **中規模~大規模開発でマイグレーションファイルの管理コストが高い**

`Ridgepole`は上記のような問題を解決(とまではいかないかもしれないが、軽減)してくれます。今回は`Ridgepole`の導入方法と、運用をちょこっと快適にするエッセンスを共有していきます。

# Ridgepoleを使おう!!
## Ridgepoleとは?

**[Ridgepole](https://github.com/winebarrel/ridgepole)はクックパッドが開発したスキーマ管理用のコマンドラインツール**です。[クックパッドの記事](https://techlife.cookpad.com/entry/2014/08/28/194147)を一読してみるといいかもし

元記事を表示

初投稿

Ruby on Railsにて開発をしていたところ、image_tagaで指定した画像が本番環境でのみ表示されない現象にハマったので、その解決方法を記録しておきます。

## image_tagのパス指定

####app/assets/images直下に画像を格納する場合

“`ruby:hoge.rb
<%= image_tag '/assets/hoge.png' %>
“`

画像のパス指定において**’/assets/hoge.png’**とし、’/assets/images/hoge.png’と記述しないのがポイント。
まんまとimagesを記述してしまっていた…。

ちなみにassetsディレクトリ内のファイルや画像はアセットパイプラインという仕組みのおかげで読み込みが早くなるため、開発者が用意する画像はpublicディレクトリに格納せず、こちらに格納するそう。

コード修正後、本番環境にて確認したが、相変わらずエラー表示…。
ログをたどると、どうやら指定の画像が見つからないよと言われている。

原因を調べたところ、アセットパイプラインによってコンパイル

元記事を表示

Railsのcountメソッドは必要なときだけ使おう

#結論
“`countメソッド“` はその都度SQLクエリを実行する。
N+1問題となるため、不要なときは“`sizeメソッド“`を使用する。

#sizeメソッド is 何
以下のActive Record公式GitHubで定義を確認します。
[https://github.com/rails/rails/blob/94b5cd3a20edadd6f6b8cf0bdf1a4d4919df86cb/activerecord/lib/active_record/relation.rb#L210](Active Record)

“`
def size
loaded? ? @records.length : count(:all)
end
“`
未ロード時にはcountされて、
キャッシュがあるときはレコードのlengthを取得しているだけのようです。

#countメソッドとの比較
投稿のコメント数を取得することを例にとって説明します。

##countメソッドを使用するとき

“`
<%= micropost.commented_users.count %>
“`

元記事を表示

Rspecよくあるエラー問題集

##事前準備

ターミナル上で下記コマンドを実行してcloneする。

“`
git clone https://github.com/Shu-Hos/chat-app_error.git
cd chat-app_error
bundle install
yarn install
rails db:create
rails db:migrate
“`

###問題1
ターミナルで下記コマンドを実行してください。

“`
bundle exec rspec spec/models/user_spec.rb
“`

すると`NameError: uninitialized constant Faker`
のエラーが発生したかと思います。
まずはこちらがErrorではなくfailuresになる段階まで改善してください。
※こちらはヒントなしで解決しましょう。

###問題2
上記のエラーが改善されて再度こちらのコマンドを実行してください

“`
bundle exec rspec spec/models/user_spec.rb
“`

しかしテストの結果は、重複したemail

元記事を表示

[Rails] ルーティングの設定方法

Railsルーティングンの役割は**「リクエストとして受け取ったURLを、コントローラ内のアクションに振り分けていく」**というものです。

記述方法

Railsのルーティングは、configディレクトリのroutes.rbに記述します。

“`routes.rb
[HTTPメソッド] ‘[URIパターン]’, to: ‘[コントローラー名]#[アクション名]’
“`

確認方法

ルーティングを設定したら、確認しましょう。

“`ターミナル
rails routes
“`
コマンドで、アプリケーションで設定済みのルーティングを確認できます。
すると、下記のような結果がターミナルで表示されました。

“`ターミナル
Prefix Verb URI Pattern Controller#Action
posts GET /posts(.:format) posts#index
“`

**Verb + URIパターン = リクエストの内容**
**Controller#Action = リクエストの行き先**  を表しています。

元記事を表示

【Rails】投稿を「何分前」「何日前」と表示したい!!と思ったので実装してみた

## 時間

[![Image from Gyazo](https://i.gyazo.com/9e95928dea8657f772e9a03b8b86328c.png)](https://gyazo.com/9e95928dea8657f772e9a03b8b86328c)

よく見るこんなやつです。
ぼくはSNSサービスを開発していたので開発日数は「何分前」「何日前」とかにしたかったんですよね。
そこで調べたらめちゃくちゃ簡単に実装できることを知りました。

## 結論
time_ago_in_wordsメソッドを使う

“`ruby
<%= time_ago_in_words(post.created_at) %>
“`

上記の写真のように作るのであれば以下のコードを使えばOKです。

“`ruby
<%= time_ago_in_words(comment.created_at) %>前
“`

めちゃくちゃ簡単ですね笑
ささっと実装しちゃってくださいませ〜。

おわり
written b

元記事を表示

【Rails】Rails6でAPIモードの環境構築をしっかりやる

# はじめに

最近、`RailsAPI+React`のような形で、Webアプリケーションを構築するスタートアップ企業をしばしば見かけます。

今回は`React`等にフロント側を委託し、RailsはAPIに専念することを前提とした環境構築と、その解説をしていきます。

# 環境

– `Ruby`:2.6.3
– `Rails`:6.0.3

# RailsAPI環境構築
## 【1】`rails new` で雛形を作成

今回は下記を指定した上で`rails new`を実行し、`RailsAPI`の雛形を作成します。

– `API`モード
– DBを`MySQL`
– `Rails`のバージョン`6.0.3`

“`sh
rails _6.0.3_ new hoge -d mysql –api
“`

このコマンドを実行すると、自動で必要なファイルを作成してくれます。大変便利ですね。

## 【2】`rails db:create`でDBを作成

“`sh
rails db:create
“`

DBを作成しておきます。マイグレーションファイルがまだ存在しないので、`r

元記事を表示

文系大学生が独学で学習開始6ヶ月目にReact + Rails APIモード(SPA) + AWSでポートフォリオを作成したお話し

##1. はじめに

__2020/2月にプログラミングの学習を開始してから6ヶ月程経った頃、いざ参らんと満を辞してポートフォリオの製作に着手し始めました。
何やかんやありまして何とか完成まで漕ぎ着けることが出来たのですが、カレンダーを確認してみるとどうやら3ヶ月も経過していたようです。
なるほど、トータルで9ヶ月。僕はそっとカレンダーを閉じました。
__

さて、足踏みしてしまった事をクヨクヨしても仕方がありませんので先に進みます。

今回僕は__小説投稿アプリケーション__を製作してみました。

この記事では製作したポートフォリオの中身について色々と記述をしつつ、ポートフォリオを完成させるまでに__学びになった事や自分なりに気を付けた事、それからキツかった事__などについて書かせて頂きました。

少々長くなってしまった感はありますが、どうか暖かい目で読み進んで頂けたら幸いです

元記事を表示

投稿を削除する時にアラートを表示させる

##使用環境

ruby 2.6.5
rails 6.0.0

##目標
投稿した記事を削除する際にアラートを表示させる。

##実装
ポートフォリオなどを作成するときに削除ボタンを作ることがあるかと思います。僕の場合はこちらですね↓

“`ruby
<%= link_to '削除', song_path, method: :delete, class:'song-destroy',data: {confirm: "本当に削除しますか?"} %>
“`

大切な箇所はこの data: {confirm: “本当に削除しますか?”} の部分です。
これをつけるだけで削除するときに確認のアラートが表示されるようになります。(タブだらけなのは気にしないでください笑)

![スクリーンショット 2020-12-05 17.39.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927542/a9157357-0d95-65da-715d-85ca6670b3c9.png)
簡単に実装でき、ユーザーが使う

元記事を表示

【Rails】Concernでコントローラーの重複した記述をまとめる

# Concernとは
結論から言いますと、コントローラーの重複した記述を防ぐための、拡張機能です。
アプリ作成が続くと、コントローラーの記述が増え、重複した記述になりがちです。
そこでConcernを利用してまとめていきましょう。

# やり方
### 1. `controller/concerns`ディレクトリにファイルを作る。今回は`common_actions.rb`と名前をつけます。
### 2. controllerで重複した記述を見つける
“`ruby:controller/post_as_controller.rb
#省略
def update
if @post.update(post_params)
redirect_to user_url(current_user)
else
render :edit
end
end
#省略
“`
“`ruby:controller/post_bs_controller.rb
#省略
def update
if @post.update(post

元記事を表示

OTHERカテゴリの最新記事