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

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

validates メソッドでユニーク制約を行うと ActiveRecord::RecordNotUnique ではなく、 ActiveRecord::RecordInvalid が raise される

# 概要
DBのユニーク制約だけを行なっていた状態から、ユニーク制約の validates メソッドを書いたときにエラーハンドリングで少しはまったので共有です。

# 解説

## DBのユニーク制約のみがかかっているとき

“`ruby:user.rb
# == Schema Information
#
# Table name: users
#
# id :bigint(8) not null, primary key
# name :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_users_on_name (name) UNIQUE
#

class User < ApplicationRecord end ``` `ActiveRecord::RecordNotUnique` が raise されます ```

元記事を表示

Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #19 Docker編

# こんな人におすすめ
* プログラミング初心者でポートフォリオの作り方が分からない
* Rails Tutorialをやってみたが理解することが難しい

前回:[#18 EC2環境構築, Nginx+Puma+Capistrano編](https://qiita.com/aokyo17/items/281b5a1658ea58bc7b24)
番外:[#18.5 環境変数, Gmail送信設定編](https://qiita.com/aokyo17/items/98e8e48d309a506db4e8)
次回:準備中

# 今回の流れ

1. 完成のイメージを理解する
* Dockerを導入する理由を知る
* RailsアプリをGitHubからクローンする
* ローカルの開発環境を整える
* Dockerをインストールする
* Dockerの仕組みを理解する
* Dockerのファイルを作成する
* Dockerを起動する
* トラブルシューティング

この記事は、動画を観た時間を記録するアプリのポートフォリオです。
今回は、**Railsアプリの開発環境にDocker**を組み込みま

元記事を表示

db:create で ActiveRecord::NoDatabaseError の原因が factory_bot_rails だった話

ググっても引っかからなかったので取り急ぎメモ

# 結論

“`diff:Gemfile
– gem ‘factory_bot_rails’
+ gem ‘factory_bot_rails’, require: false
“`

# 背景

`bin/rails db:create` や `bundle exec rake db:create` 等で `ActiveRecord::NoDatabaseError: Unknown database ‘xxxxx’` というエラーが発生した。いや、その DB を作れと言ってるんだが…?

スタックトレースを追うと `factory_bot` に関する怪しげな部分が見つかった。以下は GitHub Actions 上での例。

“`
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/trait.rb:12:in `instance_eval’
/home/runner/work/xxxx/xxx

元記事を表示

FontAwesomeの導入

##FontAwesomeとは?
ウェブフォントの一種。
文字を扱うのと同じようにアイコンを表示させることができる。

##導入方法
FontAwesome用のGemがをインストールする。
全ての環境で使用したいので、最下部に以下のコードを記載する。

“`ruby:Gemfile
gem ‘font-awesome-sass’
“`
bundle installとサーバ再起動を忘れずに。

##assetsフォルダに書き込み

“`ruby:application.scss
@import “font-awesome-sprockets”;
@import “font-awesome”;
“`

###補足
CSSの仕様で、paddingなどの設定を行った場合、その要素全体のサイズが
大きくなる場合がある。以下の記述を追加すると、paddingやborderの設定を行っても、
要素の大きさがwidthやheightで指定したサイズが維持される。

“`ruby:messeges.scss
* {
box-sizing: border-box;
}
“`
「*」は、全

元記事を表示

Before Rails Tutorial2章 Scaffold を用いた高速なアプリケーション構築 及び MVCの理解

本投稿は講義資料であり、Rubyの基礎は理解しているが、rails tutorialで躓く読者を対象としています。
[1章:環境構築](https://qiita.com/earth660/items/a51874eba618e2aa5ce6)
[2章:Scaffold を用いた高速なアプリケーション構築 及び MVCの理解](  https://qiita.com/drafts/c791f1e46875e8a9994e)
[3章:Scaffold を用いない開発方法 及び 応用](https://qiita.com/earth660/items/161fa9090860cbd174bf)

#1.Scaffold

この章では、Railsの強力な機能をいくつか紹介するためのアプリケーションを作成します。
大量の機能を自動的に生成するscaffoldジェネレータというスクリプトを使って**蔵書管理アプリケーション**を生成し、それを元にRailsの概要を一緒にみていきましょう。

*3章以降では、scaffold は使わずに、自力で作る方法を学びます。

#### scaffold コ

元記事を表示

Before Rails Tutorial3章 Scaffold を用いない開発

本投稿は講義資料であり、Rubyの基礎は理解しているが、rails tutorialで躓く読者を対象としています。
[1章:環境構築](https://qiita.com/earth660/items/a51874eba618e2aa5ce6)
[2章:Scaffold を用いた高速なアプリケーション構築 及び MVCの理解](https://qiita.com/earth660/items/c791f1e46875e8a9994e)
[3章:Scaffold を用いない開発方法 及び 応用](https://qiita.com/earth660/items/161fa9090860cbd174bf)

前章では、Scaffoldを用いて高速でアプリケーションを構築しました。
自動化された部分も多く、現段階では、大まかな理解であるとおもいます。

今回は、route Model View Controller それぞれ自分で作っていきます。
とはいっても、継承まで含めてすべて書くには理解することが膨大で大変ですので、
前回も使用した generate は使用していきます。

まずは、R

元記事を表示

RailsでスコープとGraphQL::Batch::Loaderを使うときの注意点

RailsでGraphQL::Batch::Loaderを使うときの注意点です。

## 問題

N + 1問題を回避しようとしてGraphQL::Batch::Loaderを導入したが、N + 1問題が回避されなかった。

GraphQL::Batch::Loaderは以下のように、N + 1問題を回避するためのクラスです。
https://github.com/Shopify/graphql-batch#schema-configuration

## 原因

GraphQL::Batch::Loaderのforの引数にスコープ(ActiveRecord::Relation)を渡していたことが原因です。

GraphQL::Batch::Loaderでは、forの引数が同じ場合にBatch Loadされます。

同じというのは正確には、ハッシュのキーとして一致するという意味です。
ActiveRecord::Relationはハッシュのキーとして使えるように実装されていないので、実質的に同じでもハッシュのキーとして一致することはありません。

そのため、同じと認識されずBatch

元記事を表示

ActiveRecord::DuplicateMigrationNameError:とは?

### ActiveRecord::DuplicateMigrationNameError:
`rake db:migrate`した際に下記のようなエラーが出ることがある.

“`
rake aborted!
ActiveRecord::DuplicateMigrationNameError:
“`

これの意味するところは,同一内容のマイグレーションファイルが二つあるよということ.
マイグレーションファイル名が異なっていてもDB構造が全く一緒なら起こった.
新しい方のマイグレーションファイルを削除し,もう一度`rake db:migrate`すればOK.

元記事を表示

Rails6 flash表示をする

# 目的

– flashの表示で若干詰まったことがあったため実施方法をまとめる

# 書き方の例

– 下記に処理された時に「削除されました」と表示される時の書き方をまとめる。
– 任意のコントローファイルに下記の一文を記載する。下記が実行された時にflashが表示される。

“`ruby
flash[:notice] = “削除されました”
“`

– application.html.erbファイルの任意の場所に下記の処理を追加する。

“`html
<%= flash[:notice] %>
“`

元記事を表示

ルーティングのshallowオプション

ルーティングのネストを調整するときに、shalowオプションというのを使いました。
書き方は以下です。

“`ruby:routes.rb
Rails.application.routes.draw do
resources :boards do
resources :comments, shallow: true
end

“`

## shallowオプション有りとshallowオプション無しの比較

– shallowオプションなし

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

– shallow: trueオプション

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

元記事を表示

rails db:reset、rails db:migrate:reset、rails db:setupの違い

rails db:reset、rails db:migrate:reset、rails db:setupの違いをたまにどれがどれだったか忘れるので、まとめておきます。

## rails db:reset

– rails db:reset の場合は、新しくテーブルを作り直して、さらにシードファイルも読み込んでダミーデータも作ってくれる。新しくテーブルを作り直すので、既存のデータは全て消えて新たにシードファイルを元に作り直す。

“`
Dropped database ‘hogehoge_development’
Dropped database ‘hogehoge_test’
Created database ‘hogehoge_development’
Created database ‘hogehoge_test’
“`

– rails db:reset はマイグレーションファイルを編集しても、その内容は反映されない。マイグレーションを実行しない。スキーマファイル ( db/schema.rb ) だけを利用する。

## rails db:migrate:reset

元記事を表示

【Rails】Active Jobについてゼロから理解する

# 概要
**RailsのActive Job**についてゼロから理解する為に調べたことをまとめます。

– 本格的なアプリでは**往々にして時間のかかる処理が発生**する
– 大量のデータ集計、外部サービスとの連携、メール送信など
– そしてこれらの処理はリアルタイムに完了してなくても良い場合もある
– **アプリから実行すべき処理(ジョブ)**を**待ち行列(キュー)**に登録して**後から実行(非同期実行)**することで、アプリのレスポンスを改善できる!

– **Active Job**とは、そのようなジョブの管理から実行までの管理する為のモジュール
– Active Jobそのものは、基本的に、ジョブ操作の為のインタフェース(メソッド名などの決まりごと)を提供しているに過ぎない
– 実際にジョブを実行するのはジョブ管理ライブラリの役割(**Delayed Job**や**Sidekiq**)
– アダプターを切り替えれば、アプリケーションをほとんど改修することなくバックエンドのジョブ管理ライブラリを自由に切り替えられる

# やってみた
## delayed_j

元記事を表示

【Rails】simple_calendarを日本語表記にする方法

Railsでsample_calendarを導入したのですが、日本語表記にするのに少し手間取りました。

しかし、無事解決することができたので共有したいと思います。

| Railsのバージョン | 5.2.3 |
|:—————–|——————:|:——————:|
|Rubyのバージョン | 2.5.1 |

###手順1

“`config/application.rb
config.i18n.default_locale = :ja
“`
まずはこいつを追加します。

###手順2

“`config/locales/ja.yml
ja:
date:
abbr_day_names:
– 日
– 月
– 火
– 水
– 木
– 金
– 土
abbr_month_names:

– 1月
– 2月

元記事を表示

[Rails]Chart.jsでコーヒーのテイストを視覚化

##実装すること
コーヒーの味データをTaistテーブルに格納します。
Taistテーブルの「refresh,bitter,body,fruity」の4つのカラムデータをChart.jsを使用して描画します。
railsの変数は「gon」というGemを使用してjavascript内でも使用します。

##Taistテーブル定義
| カラム名 | カラム説明 | データ型 | デフォルト |
|:—————–|——————:|——————:|:——————:|
| ID | テイストID | integer | |
| title | タイトル | string | |
| refresh | スッキリ |

元記事を表示

Ruby / Rails資料

## Rails関連の情報源

### Railsガイド
* [Action Controller の概要](https://railsguides.jp/action_controller_overview.html)
* [レイアウトとレンダリング](https://railsguides.jp/layouts_and_rendering.html)
* [Rails のルーティング](https://railsguides.jp/routing.html)
* [Active Record マイグレーション](https://railsguides.jp/active_record_migrations.html)

元記事を表示

【Rails】リロードしないとJavaScriptが動かない!【簡単に解決】

#はじめに
以前`jQuery`を使ってタブメニューの切り替えを実装したときに、
ビューを開いた__初回__は非同期で切り替わるのに、
別のページに移動したり
「戻る」ボタンを押したあと再びタブメニュー画面に戻ると、、、、

動かない、、、!なぜだ、、!

なんて経験をして1日無駄にしたことがあります。
__jQueryやビュー画面のコードは間違ってないはず!なぜ!__って人向けの記事です。

#解決方法①

各`link_to`ごとに`turbolinks`とやらを無効にすればOKです。簡単です。

“`erb

<%= link_to "ホーム", root_path, data: {"turbolinks" => false} %>
“`
`data: {“turbolinks” => false}`は遷移先ページのみ`turbolinks`を切ることが出来ます。

※`turbolinks`とは、ページ遷移を`Ajax`に置き換え、`JavaScript`や`CSS`のパース(解析・変換)を省略することで高速化する`gem`で、`Rails4`からはデフォルトで使用されてい

元記事を表示

新規Railsプロジェクト作成手順(Rails 6)

# 目的
Ruby on Rails 6,MySQL,RSpecを用いた環境を構築し,サーバーを起動してエラーなく最初のページが表示されるようにする.

# 開発環境
MacOS High Sierra 10.13.6
Ruby 2.7.0
Ruby on Rails 6.0.2.1

# 前提
1. rbenv,Rubyのインストール
2. MySQLのダウンロード
3. rbenvへのbundleインストール(下記)

“`
$ rbenv exec gem install bundler
$ rbenv rehash
“`

# 手順
1. プロジェクトを作成したいディレクトリに移動
2. Railsインストール
3. 上記のRailsを元にrails new
4. Railsプロジェクトのセットアップ

# 1. プロジェクトを作成したいディレクトリに移動
“`
$ mkdir projects
$ cd projects
“`

# 2. Railsインストール
1. Gemfile作成
2. Gemfile書き換え(もちろんvimをはじめとしたエディタで編集してもお

元記事を表示

[Rails]ransackを使わずに検索機能の実装

##実装すること
投稿(Item)のタイトル(title)の検索

##モデルの作成

“`
$ rails g model Item title:string
$ rails db:migrate
“`
##ルーティングの作成

“`config/routes.rb
Rails.application.routes.draw do

get “search” => “items#search”, as: ‘search’

end
“`

##Itemコントローラーの作成・編集

“`
$ rails g controller items
“`

“`app/controllers/items_controller.rb
class ItemsController < ApplicationController def search #itemのtitleを曖昧検索 @items = Item.where('items.title LIKE(?)', "%#{params[:search]}%").order(created_a

元記事を表示

[Rails]親子同時保存(cocoon)とリコメンド機能(おすすめ機能)の実装

##実装すること
今回は私が作成した、「お気に入りのコーヒーを投稿するポートフォリオ」で実装した「あなたへのおすすめ機能」のコードを書いていきます。
簡単にポートフォリオについて説明させて頂くと、
・ユーザーは飲んだコーヒーを投稿します。(Itemテーブル)
・投稿する際に飲んだコーヒーのテイスト(Taistテーブル)を16個のブロックから選びます。
・その投稿に対してユーザーはいいねをすることができます。(Likeテーブル)
・ログインユーザーはマイページに「あなたへのおすすめ」の投稿(Item)が表示されます。
「あなたへのおすすめ」を表示する流れは下記となります。
①ログインユーザーが一番最近いいねした投稿と同じテイストデータの投稿を取ってくる
②①の投稿の中でまだログインユーザーがいいねしていない投稿を取ってくる
③②の投稿の中で最新の投稿を1つ取ってくる(②が無い場合はランダムに1つ取ってくる)

※いいね機能に関しては、下記リンク先で説明しております。
https://qiita.com/yuto_1014/items/78d8b52d33a12ec33448

##イメー

元記事を表示

Devise ログインボタン押せない

# 問題
ログインボタン押せない
リロードするとログインボタンを押せるようになる

# 解決方法

“`ruby:Gemfile
gem ‘turbolinks’, ‘~> 5’
“`

“`ruby:Gemfile
# gem ‘turbolinks’, ‘~> 5’
“`
コメントアウトするとうまく行きます。

bundle updateでコメントアウトを反映させましょう

“`terminal:ターミナル
$ bundle update
“`

“`js:app/assets/javascripts/application.js
//= require turbolinks
# ↑これも消しましょう
“`

元記事を表示

OTHERカテゴリの最新記事