Rails関連のことを調べてみた2021年05月15日

Rails関連のことを調べてみた2021年05月15日

gem mysql2がbundle installできない時の解決法(ERROR: Error installing mysql2:)

RailsでMySQLを使うために、Gemfileに`gem mysql2`を記述し、`bundle install`した際に以下のようなエラーが出てきました。

“`bash
Building native extensions. This could take a while…
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.

current directory: /Users/test/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
/Users/test/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20210514-68423-q7xfp2.rb extconf.rb
checking for rb_absint_size()… yes
checking for rb_absint_singlebit_p()…

元記事を表示

【Rails】画像アップロード機能の導入

# 目的
Railsで作成したアプリに画像アップロード機能を追加する。

# 開発環境
macOS: *Big Sur*
Rubyバージョン: *2.5.1*
Railsバージョン: *6.0.0*

# 前提
– アプリを作成済み。

# 手順

1. [必要な手順の確認](#必要な手順の確認)
1. [ImageMagickのインストール](#imagemagickのインストール)
1. [Gemのインストール](#gemのインストール)
1. [Active Storageのインストール](#active-storageのインストール)

# 必要な手順の確認

まずは、必要な手順から確認していきましょう!

画像のアップロードには、Railsの`Active Storage`というGemを使用します。
これを使用することで、画像などのファイルのアップロードを簡単にするメソッドが使用できたり、画像を保存するテーブルを簡単に作成できます!

また、画像のサイズや色などを編集する機能も実装します。
画像加工のために必要な`ImageMagick`という画像変換ツールと、それをRail

元記事を表示

include? の基本![ 使い方:含まれているか判断できます ] 〜基礎アウトプット〜

# `include?` って何?
`include?` はオブジェクトが範囲に含まれているか判断するときや
対象文字列に比較文字列が含まれているか判断するときに使用します。

含まれているときは`true`を、
含まれていないときは`false` を返します。

では使い方を簡単に説明していきます。

##使い方 1
`(始端 .. 終端).include?(比較対象)`
始端から終端の範囲に比較対象は含まれていますか?
ということです。

###文字列の使用例

“`ruby
(“A” .. “E”).include?(“C”)  #A ~ E の範囲に C は含まれていますか?
#=> true

(“a” .. “e”).include?(“C”) #a ~ e の範囲に C は含まれていますか?
 # => false

“`

###数値の使用例

“`ruby
(1 .. 10).include?(5) #1 ~ 10 の範囲に 5 は含まれていますか?
# => true

“`
##使い方 2

`対象文字列.include?(比較文字列)`

元記事を表示

【rails】SNSシェア機能の実装(social-share-button)

#実装すること
* gem social-share-buttonを使用してSNSシェアボタンを設置する。
* 設置した場所の内容を特定のSNSにシェアが可能。

social-share-button: https://github.com/huacnlee/social-share-button

#完成形

* 設置可能なSNSシェアボタン一覧
![ea7c0a20-8ad8-11e6-953f-83354d9a6384.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/e1a36b09-1a98-9580-2039-87184b28d8cf.png)

* 実際の実装済み画面
![gif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/2f026c7b-cb87-3544-db75-2c637efe46da.gif)

#前提

* 投稿機能を実装済み(今回は、question

元記事を表示

[Rails] MySQL(clearDB) で Heroku にデプロイ時、Mysql2::Error::ConnectionError の解決策

### 概要

開発環境で MySQL ( gem ‘mysql2’ ) を利用してDBにオブジェクトの新規作成・保存できていたのに、本番環境のDBが作成できない時の解決策をまとめる。

### 発生時に実行され、表示されたエラー

“`shell:Terminal
$ heroku run rails:db migrate

Mysql2::Error::ConnectionError: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
“`

### 結論
– clearDB の設定項目で入力漏れがあった

“`bash:
$ heroku config

#=> CLEARDB_DATABASE_URL: <作成した clearDB のURL>

$ heroku config:add DATABASE_URL=’上記のURL’
“`

### 事前設定

“`yml:config/database.yml(変更前)
production:
<<: *

元記事を表示

Rails バリデーションの日本語化、レイアウト時に起きた現象

# 某プログラミングスクールに通う転職生の、日々悩める日記

初めまして!某プログラミングスクールに通う転職生です。今回初投稿なのですが、投稿しようと思ったきっかけとしては

エラーにイラつきすぎて、それを同じく初心者プログラマーの方に繰り返して欲しくないからです。

それでは初投稿、書いていきます!!

## 今回の現象

現象としては、Railsに入れたDeviseに、バリデーションを追加したのち、レイアウトと日本語を整えたいと思い

色々いじった後、Sign_up画面で何故かルーティングエラーが発生しました。

Sign_up画面のみです。更新ボタンや、その他のボタンを押しても発生します。

ちなみにLog_in画面やその他の画面では発生しません。

![66491DB9-1786-48D9-AF15-7B01CA56B653_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1156536/324d3bcf-1856-a9e3-6b66-857fef46a735.jpeg)

##

元記事を表示

ストロングパラメーターで指定した情報だけ保存

##はじめに##

今回は学習中に作成した簡易版twitterでストロングパラメーターをアウトプットしていきます。

必要な情報だけをDBに保存していきます
仮に全てのデータ(パラメーター)を受け取る仕様の場合、悪意のあるパラメーターによって第三者にデータを改竄されてしまうなど、セキュリティ上に問題が起きてしまう恐れがあります。
回避するためには、ストロングパラメーターを使用して受け取るパラメーターを制限することが大切です。

##実際にどんな情報が送られてきているか##

このアプリは写真のURLとつぶやきを投稿できるものです。
![スクリーンショット 2021-05-14 19.38.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264460/bea68535-c148-4241-6a8a-6a048898b514.png)

モデルやビュー等は割愛させていただき下記がコントローラーになります。
実際に投稿ボタンを押したら何が送られてくるのか*binding.pry*で確認します。

“`

元記事を表示

system_specでjqueryをテストする

## 導入

https://qiita.com/Ub_Iwerks/items/c4f28dac6d1922bf32cb

前回の記事で、`:rack_test` → `:selunium`の以降が成功し、無事jqueryなどのDOM操作をrspecでテストできるようになった、わけではありませんでした。

今回はこちらの記事を参考に、正式にDOM操作をrspecでテストできるようになりました。(ありがとうございました!)

https://qiita.com/ngron/items/f61b8635b4d67f666d75

## 結論

結論としましては、前回の記事の設定でDOM操作をテストする為には、以下の3操作が必要でした。

1. chromedriverのDockerイメージを導入する `Dockerfile`
2. テスト実行環境をchromedriverに設定 ← 前回の記事の内容
3. system_spec.rbで`js: true`にする

補足:自分の場合はポート番号が重複するエラーが発生したので(多分そう)、テスト環境のポート番号を変更しました。 `rails

元記事を表示

コントローラーへ送る値を同じ値を複数指定

コントローラーへ送る値を同じ値を複数指定

選択したユーザーの情報をparamsで扱えるようにパラメーターを送ります。
以下のようにnew.html.erbを編集してください。

“`rb:app/views/rooms/new.html.erb



“`

select要素のname属性にroom[user_ids][]を指定し、option要素のvalue属性にuser.idを指定しました。このように記述することで、これまでとは異なる形でパラメーターが送信されるため、paramsは以下のようにな

元記事を表示

Deviseのデフォルトのメールアドレスバリデーションが弱すぎる件に対処する

Railsでユーザのログイン機能を実装する場合、言わずと知れた __Devise__ を使うといろんな機能がすぐに使えて便利ですよね。デフォルトでは、メールアドレスとパスワードで登録・ログインするようになっていますが、今更ながら不正なメールアドレスが登録されてしまうというバグを生み出してしまいました :innocent:

Deviseにおけるメールアドレスのバリデーションには、

“`sh
$ bin/rails g devise:install
“`

で生成される `config/initializers/devise.rb` に定義されている正規表現が使われるのですが…

https://github.com/heartcombo/devise/blob/c82e4cf47b02002b2fd7ca31d441cf1043fc634c/lib/generators/templates/devise.rb#L183-L186

> `/\A[^@\s]+@[^@\s]+\z/`

うーん、弱い!

ということで、今回は __email_validator__ というGemを使

元記事を表示

お気に入り機能の実装

#目次
[1.はじめに](#1-はじめに)
[2.いいねボタンの導入](#2-いいねボタンの導入)
[3.同期通信で実装する](#3-同期通信で実装する)
[4.非同期通信で実装する](#4-非同期通信で実装する)
[5.おわりに](#5-おわりに)

#1. はじめに
今回は同期通信で実装した後、それをもとに非同期通信に切り替えていきます。まずは必要なものを導入しましょう。

#2. いいねボタンの導入
`font-awesome-rails`を導入しましょう。もし文字をクリックしてお気に入り機能を実装する場合であれば[3.同期通信で実装する](#3-同期通信で実装する)から実装していただいて問題ないです。以下のようにアイコンをクリックしてお気に入りをつけたり外したりしたい場合はこちらを参考にしてください。
![52a7c16510cbb3fd2f8095bae614ab1e.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953064/a163576e-b82b-952a-aed0-b567229fd

元記事を表示

$ bundle exec rake db:migrate RAILS_ENV=production時のエラーに関して

#はじめに

作成したアプリをAWSにデプロイしようと作業しており、「$ bundle exec rake db:migrate RAILS_ENV=productionコマンドを入力した際に発生したエラーを解決するまでの道のりです。
同じエラー内容が出ている方の一助になれれば幸いです。

#エラー解決に向けて
unicornをインストールして、「$ bundle exec rake db:migrate RAILS_ENV=production」コマンドを入力すると、

“`
ec2-user@ip-10-0-0-42 アプリ名]$ bundle exec rake db:migrate RAILS_ENV=production
rake aborted!
ActiveRecord::AdapterNotSpecified: ‘production’ database is not configured. Available: [“default”, “development”, “test”]
“`
とエラー表示がされました。

どうも’production’ databas

元記事を表示

[rails] DateTime#agoがRails5.2まで1.dayといった引数を受け付けていたが6.0からダメになった原因を調べた

Rails6.0への更新中、理由が不明だった為調べました

“`ruby
# DateTime#agoの実装
def ago(seconds)
since(-seconds)
end
“`

“`ruby
# rails 5.2
DateTime.current
=> Fri, 14 May 2021 16:20:00 +0900
DateTime.current.ago(1.day)
=> Thu, 13 May 2021 16:14:26 +0900

# rails 6.0
DateTime.current
=> Fri, 14 May 2021 16:31:41 +0900
DateTime.current.ago(1.day)
TypeError: not an integer
from /bundle/gems/activesupport-6.0.3.7/lib/active_support/core_ext/date_time/calculations.rb:113:in `Rational’
“`

5.2ではagoで呼ばれている`DateTime#sinc

元記事を表示

【Rails】カラム型の種類

# カラム型の種類

| データ型 | 種類 |
| ————— | —————————————- |
| string | 文字列(1〜255文字) |
| text | 長い文字列(1〜4,294,967,296文字) |
| integer | 整数(4バイト) |
| bigint | 整数(8バイト) |
| float | 浮動小数 |
| decimal | 精度の高い小数 |
| nume

元記事を表示

Rails ユーザー登録機能を一瞬で作ろう

見てくださりありがとうございます。
自分は独学でrailsを勉強しているものです。
railsでWEBアプリケーションを作っているとユーザー登録の作成は必ず行いますよね!
なので今回はユーザー登録機能を実装するまでに必要なコードを淡々と書いて、コピペするだけでユーザー登録機能が作成できるようにします

###前提
アプリはすでに作成されている状態を想定しています(rails new アプリ名)
今回のユーザー登録機能とはユーザー登録画面でユーザーを新規登録するまでであり、登録内容の修正、ユーザー削除等の機能は作りません
あくまでもユーザー新規登録機能を作成し、成功すればユーザー詳細画面に飛ぶだけです
登録情報は名前とメールアドレスだけにしておきます

###ユーザーコントローラーの作成

“`ruby:コマンド
rails generate controller Users show new
“`

###ユーザーモデルの作成

“`ruby:コマンド
rails generate model User name:string email:string
“`

###ル

元記事を表示

【Rails】実務未経験の僕が共同開発に参加して学んだこと

# 0. はじめに
はじめまして!

この記事では、「実務未経験の私が Rails 共同開発に挑戦し、そこで学んだことや躓いたこと、反省した点」などについてまとめています。

チームでの開発現場経験を積むことで、「コミュニケーションの適切な取り方」や「わからない部分の質問の仕方」、「コンフリクトの解消の仕方」など、一人での学習では決して学ぶことのできない貴重な経験を積ませていただくことができました。

今回はそのような共同開発の現場で実際に学んだことをまとめて、今後の自分の成長につなげることができたらなと考えております!

1. 自己紹介

|                                         
|:-:|
|![3MBのコピー.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209814/17f23ad9-9bdb-4d11-4722-b76154a01e97.jpeg)|)

まずは簡単な自己紹介からさせて頂きます!

– スペック

– 24歳

元記事を表示

新method追加2

searchアクションのルーティングを設定しよう

|今回はsearchという命名で、7つの基本アクション以外のアクションを定義します。|
|–|

**collection**と**member**を学習します。

collectionとmember

collectionとmemberは、ルーティングを設定する際に使用できます。
これを使用すると、生成されるルーティングのURLと実行されるコントローラーを任意にカスタムできます。

collectionはルーティングに:idがつかない、memberは:idがつくという違いがあります。
=
1つずつ使用例を見ていきましょう。

【例】collectionで定義した場合

“`rb
Rails.application.routes.draw do
resources :tweets do
collection do
get ‘search’
end
end
end
“`

【例】collectionのルーティング

“`rb
Prefix Verb URI

元記事を表示

has_secure_password とは(rails)

has_secure_passwordは簡単に言ったらユーザー登録やログインの時に出てくるパスワード入力に関するrailsのメソッドです。
has_secure_passwordを用いることで少ないコードでパスワードを安全に保管できるようにしてくれたり、ユーザー登録画面によくある、パスワード、確認パスワードなども作成できるようになります

今回はその__has_secure_password__についてしっかりまとめていきたいと思います。

##has_secure_passwordの使用方法

“`ruby:app/models/user.rb
class User < ApplicationRecord ・ ・省略 ・ has_secure_password end ``` ##has_secure_passwordでできること has_secure_passwordを用いると主に3つのことが可能になります ①セキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。 ②2つのペアの仮想的な属性(password

元記事を表示

【Rails】ユーザー管理機能(devise)の導入

# 目的
Railsで作成したアプリにユーザー管理機能を追加する。

# 開発環境
macOS: *Big Sur*
Rubyバージョン: *2.5.1*
Railsバージョン: *6.0.0*

# 前提
– アプリが作成されている。
– アプリ名は`test-app`とする。

# 手順

1. [そもそもdeviseとは](#そもそもdeviseとは)
1. [Gemのインストール](#gemのインストール)
1. [deviseの設定ファイルを作成](#deviseの設定ファイルを作成)
1. [deviseのUserモデルを作成](#deviseのuserモデルを作成)
1. [テーブルを作成](#テーブルを作成)
1. [deviseのビューファイルを作成](#deviseのビューファイルを作成)
1. [usersテーブルにカラムを追加](#usersテーブルにカラムを追加)
1. [deviseにストロングパラメーターを設定](#deviseにストロングパラメーターを設定)

# そもそもdeviseとは

ユーザー管理機能を実装するためのGemの事です。
devise

元記事を表示

Railsにおけるnew, build, save, createの違い

# new

インスタンスをメモリ上に作成する。

“`ruby
user = User.new(name: “Mike”)
“`

# build

newのエイリアス。
newと全く同じ動作をする。

# save

メモリ上に存在するインスタンスをデータベースに保存する。

“`ruby
user = User.new(name: “Mike”)
user.save
“`

# create

newとsaveをまとめて実行する。

“`ruby
user = User.create(name: “Mike”)
“`

元記事を表示

OTHERカテゴリの最新記事