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

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

RailsのDBをmysqlに変える(メモ)

RailsでデフォルトのDB’SQlite’から’mysql'(ver8.0.22)に変更する際に詰まったので、
mysqlインストールから実際にDB作成をするところまでの手順をメモ。

__1.mysqlインストーラでmysqlをインストール。__
http://dev.mysql.com/downloads/installer/
からインストーラをダウンロード。
![mysqlインストーラ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849880/46ad5084-a9a1-9ecf-4cd5-f585b7b1ddef.png)

__2.ダウンロードしたインストーラを起動。__
あとは流れに沿ってインストールしていく。(rootのパスワード設定等。)
そして、この流れの中で後にRailsからmysqlを起動しようとするとErrorになってしまう設定項目があった。それがこの設定。
![Authenticate.png](https://qiita-image-store.s3.ap-north

元記事を表示

RailsのSystem SpecでJavaScriptエラーを検出する方法

## はじめに

最近のWebサイトであれば、JavaScriptを利用していないページを探すほうが難しいかと思います。
そんな中で単純にRailsのSystem Specによる検証だけだと、テストを通ったのでリリースしたら実は以下のようなJavaScriptエラーが発生していたみたいな見落としが起こることが時々ありますよね。

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

解決方法としての理想はJavaScriptが影響する全ての箇所を網羅するようなテストを書くことかもしれませんが、現実的にはそこまで書けないというケースが多いかと思います。
また、全てを網羅していたつもりでも実際には漏れがあって本番環境のコンソールにJavaScriptエラーが表示されていたみたいなことは起こりえます。

そこで今回の記事ではRailsのSystem SpecでJavaScriptエラーを検出する方法を紹介します。

## 設定例

“`ruby:spec/support/system_

元記事を表示

【備忘録】Rails Deviseのモデル名を間違えて生成してしまったときの対処法

タイトルの通り、Rails Deviseのモデル名を間違えて生成してしまったときの対処法をメモします。

“`terminal
$rails generate devise MODEL #任意のモデル名
“`
このモデル名を間違えて生成してしまいました。
結果、以下のように複数ファイルが、間違えたモデル名で生成されました。

“`terminal
Running via Spring preloader in process 12067
invoke active_record
create db/migrate/20201204011415_devise_create_models.rb
create app/models/model.rb
invoke test_unit
create test/models/model_test.rb
create test/fixtures/models.yml
insert app/models/model.

元記事を表示

Rails 初期データを入れる

初期データを入れる
今回は、現場Railsや他の記事を参考に「seed」データを作成していく

似たようなものに「seed-fu」? となるものがあるらしいが
これは、また次回

##動作環境
Rails 5.1.6
ruby 2.5.1p57

##seedデータとは
アプリケーションでは、使いはじめる時点で初期データを必要とする
テストデータは手動でも作ることができるが、思いの外面倒なので

ある程度一括で作成したい

そこで、初期データ・テスト用データは`seedデータ` と呼ばれる
DBを作り直す都度、簡単にデータを作成することができる

##メリット
seedでは、一度ソースコードを書いてしまえば
コマンドを実行するだけでデータを投入することができる

つまり、都度データを作成する手間や、おこりうる間違いを減らすことができる

##実際にデータを流しこんでみる
“`rb:db/seeds.rb
User.create!(
name: ‘test’,
email: ‘test@mail.com’,
password: ‘password’,
pass

元記事を表示

rails db:migrateできない

rails db:migrateすると、以下のエラー文が出た。

“`
Caused by:
Mysql2::Error: Cannot add foreign key constraint
“`
エラー文は上の他にもpurchase recordsテーブルは存在しない?みたいな記述があったので調べてみると、どうやらマイグレーションファイルは、Migration IDの番号順に読み込まれていくらしく、先に読み込まれたaddress.rbのマイグレーションファイルに外部キーを参照する記述をしていたことが原因だった。

“`
t.references :purchase_record, null: false, foreign_key: true
“`
purchase recordsテーブルがまだ存在しないのに外部キーを読み込もうとしていた。

“`
Status Migration ID Migration Name
————————————————–
up 20201125103657

元記事を表示

Rails6はWebpackerのインストールが必要

# はじめに
Railsでのアプリ作成において、Welcome Railsの画面からDeviseを追加してビューをいじっていると、エラーが発生して画面が確認できなくなっていた。
エラーの解消法を記載するが、結論から書くとRails6で標準搭載となった **Webpacker**に伴うエラーでした。
内容はかなり初歩的ですが、アプリケーション作成において事前作業が必要な内容で、つまづきやすいので注意しましょう(自戒)

# 環境

|名前|バージョン|
|—|—|
|Ruby|2.7.2|
|Rails|6.0.3|
|Docker for Mac|2.5.0.1|
|yarn|1.22.4|

# 発生したエラー①
![_2020-11-25_4.17.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556037/efea4a54-b010-9e7e-7fcd-0cf67534f036.png)

## エラー文
Webpacker configuration file not found

元記事を表示

【バリデーション】エラーメッセージの日本語変換

#目的
入力をさせる際のバリデーションに引っ掛かった時のエラーメッセージを日本語化し、
見やすく、理解しやすくすること。
またformオブジェクトを使用している場合、うまく反映されなかったのでその場合の記述方法を忘れないため。

#手順
gem ‘rails-i18n’を追加

config/application.rbにconfig.i18n.default_locale = :jaの記述追加により言語設定を日本語に指定

この時点で再起動、bundle install後、デフォルトで設定されているcan’t be blankなどは
既に日本語に変換されている。
しかしそれ以外の設定されたカラム名やエラーメッセージには対応していないので以下を行う。

まずdeviseに対してのパターン
localeの直下にdevise.ja.ymlというファイルを作成し以下のサイトからコピペ
devise.ja.yml(https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml)

ここまで導入してもまだ変換されない

元記事を表示

[Rails6]お気に入り機能ランキングについて

#お気に入り機能について

初投稿です!かなりいろいろな方々の記事を参考にしました!

それではまずは各モデルのアソシエーションについてです。

“`app/models/article.rb
belongs_to :user
has_many :favorites
“`

“`app/models/user.rb
has_many :articles
has_many :favorites
“`

“`app/models/user.rb
belongs_to :user
belongs_to :article
validates_uniqueness_of :article_id, scope: :user_id
“`

validates_uniqueness_of :article_id, scope: :user_idの記述は属性の値が一意であることを表しています。つまり、データベースの:article_idに同じ:user_idは二つ以上入らないということです。

イメージ例)
![1ECE6C10-DD02-47BF-8

元記事を表示

Railsのログについて

標準出力とログがある

– ログレベルは`config.log_level = :error`で調節
– `rails s`した時はログファイルに書いたことを標準出力にも自動で書き出しているっぽい
– putsは、ログファイルには書き込まず、標準出力だけする
– `config.logger = Logger.new(STDOUT)`を設定すれば、ログの書き出しはログファイルではなく標準出力になるっぽい
– 本番環境では、RAILS_LOG_TO_STD_OUTが何かしら設定されていたら、ログの書き出しはログファイルではなく標準出力になる。これは、以下が`/config/environments/production.rb`に記されているから

“`
if ENV[“RAILS_LOG_TO_STDOUT”].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger =

元記事を表示

モデルから複数のカラムを連結して取得する方法

#はじめに

RailsでECサイトを作っている際に、学んだので備忘録。
プルダウンメニューでモデルの特定のカラムを表示する際に、使えるやり方なのですごく便利です!!

##

##モデルにメソッドを定義する
今回、配達先テーブル(Delivery_Goals)のデータベースから、
`postcode`と`address`と`name`のカラムデータを持ってきます。
そのために、`full_deliveries`と言うメソッドを定義します!!
**メソッド名は、なんでも大丈夫です!意味が分かりやすい名前にしましょう!!

“`ruby:delivery_goal.rb
class DeliveryGoal < ApplicationRecord belongs_to :member def full_deliveries self.postcode + " " + self.address + " " + self.name end end ``` コードを見て貰えばわかるように、カラムの頭に`self`がついてますよね! これは参照するモデルを意味して

元記事を表示

[Rails]ダブルレンダリングと言われる

下記のエラーが出て解決に小一時間かかったので共有します。

“`
Render and/or redirect were called multiple times in this action.
Please note that you may only call render OR redirect, and at most once per action.
Also note that neither redirect nor render terminate execution of the action,
so if you want to exit an action after redirecting,
you need to do something like “redirect_to(…) and return”.
“`

コントローラーの中でredirect_toを用いてレンダリングしようと思ったら起こりました。

“`
class HomeController < ApplicationController def top @posts

元記事を表示

featurespecで引っかかりやすいポイント

このエントリは [iCARE Advent Calender 2020](https://qiita.com/advent-calendar/2020/icare)の 4日目です。

# はじめに

こんにちは、Helenです。
本日は自分がCarelyのテストを担当した中で何度も遭遇した、feature specで引っかかりやすいポイントを幾つか紹介します。

## ページの切り替え
ページが正しくロードされたか確認。ページがうまく切り替わってないタイミングでテストが実行され失敗するケースがありました。

#### 改善方法

– URLが正しく切り替わったか確認します。

“`expect(current_path).to eq ‘/パス’“`

– 新ページの内容がロードされたか確認します。

“` find(*args) “`

さらに非同期でロードが必要なリストがあればfindでロードが確認出来てから次のアクションに進む方が問題点が何処にあるのかわかり易くなる。

## データの表示する順番
Query結果はソート指定がなければ表示順番が違う事がある。
Allで要素

元記事を表示

保存する情報のデフォルトの値を指定する

#はじめに
 最近はパソコンに向かう時間が短すぎてアウトプットが思うように進まない…

##モデルに情報をを保存するときにデフォルトの値を設定しておく

“`ruby:db
t.string :admin, null: false, default: admin
“`

`default`によって、情報を更新する形で入力しなければ、defaultの値が保存される。
入力フォームにカラムを入力するところを作らなければ、勝手にデフォルトの値を入力できるのでは!?

元記事を表示

【Rails】PostgreSQLでORDER BY FIELD句を実現したい

本記事は弊社内アドベントカレンダーで書いたものです。

## 概要

MySQLの `FIELD()` 句が便利よね。PostgreSQLでも使いたいわね。
モデルはRailsを使用しているからいい感じに使えるようにしたいわ。

「「「DBでできることはDBでやりたいんや」」」って :older_man: 人向け。
利点としては `LIMIT` 句を併用できること。←←まずは全件メモリ載せ!みたいなのがない故データ量が多い場合に節約になるねん :older_man::older_man::older_man:

## 背景

クエリ実行時にソート順を指定するとき、MySQLでは `ORDER BY FIELD()` 句を使用して任意の順番(例えば「赤」→「青」→「黄」など)で結果を並び替えることが出来る。PostgreSQLではできない :elephant: :vs: :dolphin:
https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_field
RailsアプリでMySQLのDBを使用して

元記事を表示

rails6でi18nによるja.yml(日本語化)が適用されない時に確認すべき3つのポイント

railsの教科書を読みながらサンプルアプリを作っていたところ、日本語化ができずに詰まってしまいました。
今回はうまく日本語化できなかった原因と、どうやって解消したかについて紹介します。
また、調べている中で、よくある日本語化が適用できない原因もざっと知れたため、併せて紹介していきます。

1. [私のアプリが日本語化できなかった理由](#anchor1)
1. [railsアプリが日本語化されない際によくある3つの間違い](#anchor2)
1. [参考](#anchor3)


#私のアプリが日本語化できなかった理由

まずは、私の作成したアプリがうまく日本語化できなかった原因は、「インスタンスを作成していないため」でした。
下記コード+Gemfile記載後のbundle installが主に日本語化に必要だったことなのですが、この内私はcontrollerのメソッド内(今回はnewメソッド)において、
@task = Task.newを記載していませんでした。

html.erbでは該当部分に、model: @taskと記載がありますが、

元記事を表示

label要素の使い方(フォーム作成、結合テスト)

# はじめに

Railsで某フリマアプリのコピーアプリを作成中、
結合テストを記述した際に、`label`をよく使ったので一度まとめてみました。

## 開発環境
Ruby 2.6.5
Rails 6.0.3.4
RSpec
– rspec-rails 4.0.1
– capybara 3.33.0
MySQL
Visual Studio Code
(GoogleChrome)

# 検証

## labelとは

フォームの中で**項目名**(ラベル)と**入力要素**(プルダウン、チェックボックスなど)を関連付けるための要素です。

主に、チェックボックスやラジオボタンをラベルと関連付け、ラベルをクリックすることで選択できるようにするときに使われます。

![label_sample](https://user-images.githubusercontent.com/70574115/100992091-17c43300-3597-11eb-9305-590e871b9930.gif)

書き方は下記の2パターンです。

1. label要素で括る
1. for属性を使用

元記事を表示

なぜ、Webサーバが必要か説明できますか?

##はじめに
ざっくりと理解している程度を記事を書くことで理解度をあげることが目的。
railsのアプリ想定の話になります。

##Webサーバとアプリケーションサーバとはなにか?
Webサーバとは、ブラウザからのリクエストにHTMLやCSSを表示する動きをするサーバの事。

詳しく解説していた記事を一部拝借。

>
Webサーバとは、Web3層構造の場合フロントエンドにある、ユーザーと直接やりとりを行うサーバです。
Webサーバには2つの役割があります。
ユーザーが操作するクライアントソフトウェア(Webブラウザなど)からの要求に応じて、ネットワークを通じてHTMLなどの静的Webコンテンツファイルを送信すること。
もう一つが、中間層にあるアプリケーションサーバに動的コンテンツを要求し、返ってきた結果を送信することです。
ただしWeb2層構造の場合は、Webサーバがアプリケーションサーバの役割も兼ねます。
>

[引用元](https://www.b-architects.com/blog/wiki/web-server)

Web3層構造は**「WEBサーバー」*

元記事を表示

【画像投稿】サムネイルのサイズをモデルごと動的に変えて保存する (Rails carrierwave) 備忘録

# 前提
gem ‘carrierwave’
gem ‘mini_magick’

・ 画像投稿機能は実装済とする(投稿機能の参考リンクは下に記述します)
・ 中間テーブルで画像を管理
###環境
・Rails 5.2.3
・ruby 2.5.1

# コード
結果から記述しますと下記の様になります。

“`ruby:image_uploader.rb
def dynamic_resize_fill
if defined? model.class::THUMBNAIL_SIZE
size = model.class::THUMBNAIL_SIZE
else
size = [540, 540]
end
resize_to_fill size[0], size[1], “NorthWest”
end

version :thumb do
process :dynamic_resize_fill
end

process resize_to_fit: [800, 800]
“`
“`ruby:user_im

元記事を表示

RailsでRSpec導入

#はじめに
Railsで作成中のポートフォリオにRSpecを導入したのでメモしていきます。

Rails 6.0.3.4
ruby 2.6.3p62
RSpec 3.10

#gemのインストール
“`
group :development, :test do
gem ‘rspec-rails’
gem “factory_bot_rails”
end
“`
bundle install
#RSpecの設定ファイルを作成する
“`
rails g rspec:install

Running via Spring preloader in process 93674
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
“`
#テストファイル作成
“`
rails g rspec:model user
“`
controllerやviewのテストファイルを作成したかったら
`rails g rspec:co

元記事を表示

[解決]Vueで、2つエラー””./src/main.js Module build failed (from ./node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js): と、Error: Cannot find module ‘eslint/lib/formatters/stylish’ Require stack:””

## 背景

vue(vue CLI)で

“`javascript
$ vue add axios
“`
をした時に、compileエラーが出た。(タイトルに書いてあるエラー。)

## 解決方法

package.jsonをこのように変更

“`javascript
“resolutions”: {
– “eslint-loader”: “2.1.2” ←削除
+ “eslint-loader”: “3.0.3” ←追加
}

“`
その後

“`javascript

$ yarn add -D eslint-loader
“`

僕の場合は、Dockerを使っていたので、コンテナを起動し直す。

エラー解消

参考:

元記事を表示

OTHERカテゴリの最新記事