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

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

【第2回】Railsのjoinsとleft_outer_joinsの挙動と違いをまとめた

前回はN+1問題が発生する状況とタイミングについて解説しました。
→[【第1回】RailsのN+1問題と解決するためのメソッド完全版](https://qiita.com/kurokawa516/items/6c6e895843e199c52ac2)
もしまだご覧になっていなければ、一読していただけると理解がスムーズになります。

##本記事の内容
今回はN+1問題を解決するメソッドを5つ紹介していきます。

1. joins
2. left_outer_joins <=(本記事ではここまで) 3. eager_load 4. preload 5. includes ##joinsメソッド SQLの``INNER JOIN句``が発行されます。(内部結合) 内部結合とは、指定したそれぞれのテーブルのカラムの値が一致するデータだけを取得する方法のことです。 内部結合についてはこちらを参考にすると理解しやすいです。 [内部結合を行う(INNER JOIN句)](https://www.dbonline.jp/mysql/join/index1.html) ###使い方 ```ruby

元記事を表示

【M1チップ/Docker/Rails6/MySQL5】既存アプリをローカルでDocker環境を構築するまでの道程

### やりたいこと
既存アプリに対してローカル環境でのdocker導入

### 環境
Ruby 2.6.5
rails 6.0
MySQL 5.6
M1チップ搭載MacOS

### 遭遇したエラー
[1.ERROR RUN bundle install](#1-ERROR RUN bundle install)
[2.error Integrity check failed](#2-error Integrity check failed)
[3.ActiveRecord::NoDatabaseError](#3-ActiveRecord::NoDatabaseError)
[4.Aws::Sigv4::Errors::MissingCredentialsError in items#index](#4-Aws::Sigv4::Errors::MissingCredentialsError in items#index)

###1.ERROR RUN bundle install

##### 発生したエラー

“`
Could not locate Gemfile
bund

元記事を表示

Rails 個人的に覚えておきたいコマンド【初心者】

##操作取り消し系

コントローラ作成~取り消し

コントローラ作成 ※例
“`rails generate controller StaticPages home help“`
取り消し ※上記で作成された関連ファイルもすべて削除される。
“`$ rails destroy controller StaticPages home help“`

モデル作成~取り消し

モデル作成※例
“` $ rails generate model User name:string email:string“`
取り消し※カラム名の指定は不要
“` rails destroy model User“`

migrate~取り消し

migrate実行
“`$ rails db:migrate“`
1つ前に戻す
“`$ rails db:rollback“`
最初の状態に戻す
“`$ rails db:migrate VERSION=0“`

元記事を表示

Railsでブログシステムを作りたいPart1

#1.なぜやるのか

・Web系企業に未経験で転職し一ヶ月たち、技術書インプットメインの自己研鑽に飽きた(とゆうか身についてない感じがした)

・もともとブログを運営したいと思っていたが、せっかくならWordPressを使わない(会社でつかっているRails)でやりたい

というモチベーションです。そのため、Railじゃないと実現できない機能があるから使うわけではなく、あくまでもRailsを勉強したいというのが先行しています。

#2.実現したいシステム
###概要
旅行先や飲食店、遊んだ場所を紹介するブログを作りたいと思っています。
想定読者は日本人と台湾人です。僕の彼女が台湾人なので台湾中国語対応のブログにしたいと思っています。

###欲しい機能
・日本地図や台湾地図で記事をソート
・地図表示
・2ヶ国語対応 
・リッチテキストエディター
・バックヤード(管理者画面)
・pc+sp対応
等々

#3.開発環境(予定含む)
ruby 3.0
rails 6.1.3
MySQL
AWS(本番環境インフラ)←まだちゃんと調べてないのでざっくりです
bootstrap
rspec
ci

元記事を表示

Railsアプリに隠しコマンド・隠しページを実装してみる

## 概要

Railsアプリを作っている際、特定のコマンドを知っている人だけが辿り着けるページみたいなものがあれば面白いなと思い調べてみたところ、JavaScriptを上手く使えば実装できる事がわかったので試してみました。

実運用できるレベルかどうかは別として完全に遊び心みたいな感じです。(URLを直打ちすれば普通に飛べちゃうみたいな野暮なツッコミは無しでお願いします(笑))

## 完成イメージ

![マイ-ムービー(7).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/3444aa18-c61b-b48c-0a1e-54adb58f1077.gif)

今回はかの有名な [コナミコマンド](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%8A%E3%83%9F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89) (上上下下右左右左BA)を入力した場合、隠しページにつながる導線をアラートメッセージで表示するような仕組み

元記事を表示

Docker上のRuby on Rails 6をVisual Studio Codeでデバッグするまでの手順

# 必要なもの

Docker Desktop
Visual Studio Code

今回の作業環境は以下になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/d4e8146f-3f4d-43ad-d6a7-e59104c4f379.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/a02cbc08-1e97-42df-32e1-19ee2df46c47.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/d56993c8-04d5-2630-75e5-a13124e19934.png)

# Docker ファイルを作成

“`dockerfile:Dockerfile
FROM ruby
RUN apt-get update

元記事を表示

Railsチュートリアル 第7章 リスト7.23のテストでArgumentError: wrong number of arguments (given 2, expected 1)

# はじめに
Railsチュートリアル7章のリスト7.23のテストで
`ArgumentError: wrong number of arguments (given 2, expected 1)`
とエラーが出たので、解決した方法をまとめておきます。

自分の環境
– ryby: 3.0.1
– rails: 6.1.3.2

## エラーが出た原因
ruby3.0以上を使っていると、キーワード引数の書き方が変わったため、書き方の問題でひっかかったぽいです。

## エラーがでたコードとエラーメッセージ

“`ruby
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path assert_no_difference 'User.count' do post users_path, params: { user: { name: "",

元記事を表示

NoMethodErrorを解決した話 (Railsチュートリアル )

Qiita初投稿です。宜しくお願いします。
今回は、NoMethodErrorの解決にかなりの時間を費やしてしまったので、紹介していこうと思います。

**エラー文**
=
“`
NoMethodError (undefined method `log_in’ for ~~~~~)
“`

**原因**
=
ApplicationコントローラにSessionヘルパーモジュールを読み込む際に、
helloメソッドに書き込んでしまっていたので、正常に動作していなかった。

正)

“`application_controller.rb

class ApplicationController < ActionController::Base include SessionsHelper end ``` 誤) ```application_controller.rb class ApplicationController < ActionController::Base def hello include SessionsHelper end end ```

元記事を表示

[Ruby on Rails] N+1問題の解決法(joinsメソッド+groupメソッド編)

# はじめに

今回ポートフォリオ(以後PF)制作で、
日本各地の名所を投稿できるサイトを制作しました。

実際に製作したサイトと、コード(GitHub)は下記のURLからご覧ください。
・サイトURL : https://japansiteinfo.com (今後予告なく公開停止する場合があります。ご了承ください。)
・GitHubのURL : https://github.com/yuta-pharmacy2359/dwc_JapanSiteInfo_app

今回は前回から引き続き「N+1問題」に関して、includesメソッドで解決できないものについて
`joinsメソッド`および`groupメソッド`を用いた解決法を紹介したいと思います。

# 本題

### 1. 前回のおさらい&今回扱う問題

前回の記事(https://qiita.com/yuta-pharmacy2359/items/cf30a20fbea9347c0b72) では、`includesメソッド`で「N+1問題」を解決できない以下の6機能のうち、

**・(ユーザー詳細画面における)1人のユーザーが獲得

元記事を表示

AWS FargateでRailsアプリとSidekiqを動かすやり方

FargateでRailsコンテナと別にSidekiqを動かしたかったので試してみました。
その手順を書いていきます。
なお、RailsにSidekiqを導入するやり方については、本記事では紹介しません。

## 前提

RailsアプリをFargateで動かすまでにやり方については以下の記事に書いております。

https://qiita.com/hatsu/items/22e11e94a0a981d78efa

https://qiita.com/hatsu/items/a70d5c49a39561836751

### Sidekiqの設定確認

“`ruby
Sidekiq.configure_server do |config|
config.redis = { url: “redis://#{ENV.fetch(“REDIS_URL”, “localhost:6379″)}”, namespace: “sidekiq” }
end

Sidekiq.configure_client do |config|
config.redis = { url: “redis

元記事を表示

Fontawesomeを導入したら文字化けしていた

Fontawesomeの導入は多分これが一番わかりやすい。

https://qiita.com/koki_73/items/fa6d31a3b54a84d19dcf

ローカルサーバーを立ち上げて、確認したら文字化けしていたので、なんでだろうと思ったら、読み込みの順番が悪かったみたい。

“`app/assets/stylesheets/application.scss
*= require_tree .
*= require_self
*/
@import “bootstrap”;
@import “font-awesome”;
@import “font-awesome-sprockets”;
“`

こうしてたんですけど、正しくは

“`app/assets/stylesheets/application.scss
*= require_tree .
*= require_self
*/
@import “bootstrap”;
@import “font-awesome-sprockets”;
@import “font-awesome”;
“`

こっちじゃ

元記事を表示

[ Rails & Nuxt ] AWS ECSを使ってデプロイをする

| No. | タイトル |
|:-:|:-:|
| 1 | [Dockerで開発環境を構築する](https://qiita.com/15recruit15/items/85ab5bbf6b900c004186) |
| 2 | [ログイン認証を機能を実装する](https://qiita.com/15recruit15/items/9d6803ad4aa412848a4f) |
| 3 | 記事投稿機能を実装する |
| 4 | [AWS ECSを使ってデプロイする](https://qiita.com/15recruit15/items/73eea044288bfdbb4fa0) |
| 5 | Circle CIを使って自動テスト•デプロイをする |

##はじめに
Rails & Nuxtでポートフォリオを作成するシリーズの第4弾になります。
全5部構成でDocker,CircleCI,AWS等のモダンな技術を組み込んだ作品を完成させる予定です。

本章ではAWSのECSを利用してアプリのデプロイを行います。

以下、完成イメージ
![AWS_インフラ.png](htt

元記事を表示

[ Rails & Nuxt ] Devise_token_auth とAuth Moduleでログイン認証機能を実装する

| No. | タイトル |
|:-:|:-:|
| 1 | [Dockerで開発環境を構築する](https://qiita.com/15recruit15/items/85ab5bbf6b900c004186) |
| 2 | [ログイン認証を機能を実装する](https://qiita.com/15recruit15/items/9d6803ad4aa412848a4f)|
| 3 | 記事投稿機能を実装する|
| 4 | [AWS ECSを使ってデプロイする](https://qiita.com/15recruit15/items/73eea044288bfdbb4fa0) |
| 5 | Circle CIを使って自動テスト•デプロイをする|

##はじめに
Rails & Nuxtでポートフォリオを作成するシリーズの第2弾になります。
全5部構成でDocker,CircleCI,AWS等のモダンな技術を組み込んだ作品を完成させる予定です。

本章では簡単なログイン認証機能の実装を行います。

## 事前知識 or 参考資料
### Devise-token-aut

元記事を表示

[ Rails & Nuxt ] Dockerで開発環境を構築する

| No. | タイトル |
|:-:|:-:|
| 1 | [Dockerで開発環境を構築する] (https://qiita.com/15recruit15/items/85ab5bbf6b900c004186) |
| 2 | [ログイン認証を機能を実装する](https://qiita.com/15recruit15/items/9d6803ad4aa412848a4f) |
| 3 | 記事投稿機能を実装する |
| 4 | [AWS ECSを使ってデプロイする](https://qiita.com/15recruit15/items/73eea044288bfdbb4fa0) |
| 5 | Circle CIを使って自動テスト•デプロイをする |

##はじめに
※初投稿なので多少読みづらいのはご容赦ください!

本記事は私がエンジニアとして就活するにあたり、ポートフォリオを完成させるまでの過程を簡単にまとめたものです。解説書というよりは手順書という感覚で読んで頂ければと思います。

全5部構成でDocker,CircleCI,AWS等モダンな技術を組み込んだ

元記事を表示

ルーティングを書く順番

新規投稿ページの作成のため、ルーティングの設定で私は最初

get “posts/:id” => “posts#show” #showは投稿内容の詳細ページへのアクション
get “posts/new” => “posts#new” #newは新規投稿ページへのアクション

と設定していた。
しかしリンクから新規投稿ページにアクセスしたところ下図のようなエラーが生じた。

![スクリーンショット 2021-06-23 15.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/16444dcb-9de8-461c-f3d8-4e6398890e33.png)

エラー内容を見ていると、どうやらPostコントローラーのshowアクションに関してエラーが生じているように見える。(NoMethodError in Posts#showより)

しかしアクセスしたリンクは新規投稿ページへのリンクだったはずである。どうしてこのようなエラーが生じてしまったのだろうか。

その理由はル

元記事を表示

svnを使用したら、zshにコマンドがないというエラーが出た

自分は特にM1Macを使っているので、ネットによくあるコマンドを使った時によくこの手のエラーに遭遇する。

で、今回は

https://qiita.com/rau/items/1219327df8a9ded494df

この記事をもとに特定のディレクトリから直接ダウンロードしようとしたら、zshでコマンドがないとのこと。

結論、

“`
brew install svn
“`

で解決。
要するにsvnがインストールされていないわけです。

### 追記

svnはめちゃくちゃ便利。
Githubの特定のディレクトリからコマンド一発でダウンロードできるのはありがたい。。。。

元記事を表示

【Rails】bundle installができない時の解決方法

超初心者向けです。
gemをインストールする際に`bundle install`を実行した時の、エラーの解決方法を紹介します。

##エラー内容
“`ruby:ターミナル
Fetching source index from https://rubygems.org/
Retrying fetcher due to error (2/4):
Bundler::HTTPError Could not fetch specs
from https://rubygems.org/
Retrying fetcher due to error (3/4):
Bundler::HTTPError Could not fetch specs
from https://rubygems.org/
“`
bundle install を実行しところ、随分待たされた挙句に上記のエラーが発生。

##試したこと

“`
gem update –system
“`
私の場合、試してもエラーが発生。
大体は解決するそうですが、、、

##解決方法
PCを再起動、もしくは、通信環境が良いところで再度チャ

元記事を表示

Railsアプリのリンクにショートカットキーを割り当てたいときに絶対に実現できる記事

shortcuts.jsという、アプリに自身で決めたショートカットキーを指定することができるjsのファイルが配布されているが、
どの記事もアラートを出すような内容だったから、今回はRailsの`link_to`をクリックするときのショートカットキーを作成していく。

#【ステップ1】shortcuts.jsをゲット
http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php
このサイトの`Code`というセクションでjsのコードが表示されるリンクがあるから、そこからコードをゲットする。

その後に、そのコードをペーストした`shortcuts.js`を作成する。
一応コードも載せておく。

“`js:shortcuts.js
shortcut = {
‘all_shortcuts’:{},//All the shortcuts are stored in this array
‘add’: function(shortcut_combination,callback,opt) {
//Provide a

元記事を表示

今更だけどdeviseのPrefixについて整理してみた

# はじめに
deviseで自動作成されるルーティングである「sessions」「password」「registrations」に関する備忘録です。
Prefixによる処理の記述はよく行いますが、「Prefixを見ただけでどんな処理が実行されるか?」をパッとイメージできなかったので整理しました。
ミスがあれば、コメントで教えてください。

# 開発環境
– Ruby 2.7.2
– Rails 6.1.3
– PostgreSQL 13.2

# 事前準備
まずはログイン機能をもつサンプルアプリを下記コマンドで作成します。
DBはPostgreSQL、テストファイルは不要なので-Tを付けます。

“`ruby
rails new sample -d postgresql -T
“`
`gem ‘devise’`の記述をGemfileに追加し、`bundle install`をします。

次に、下記コマンドを実行し、ログイン機能に対応したUserモデルを作成します。

“`ruby
rails g devise:install
rails g devise User
rails

元記事を表示

ransackで入力した値が、営業時間内か検索する。

#はじめに
現在デートスポットのレビューサイトを作成中です。
検索した時間が、営業時間内に入っていれば表示する検索機能を実装しようとしたら、なかなか実装できませんでした。
その実装方法を記事にしてみようと思います。

#modelの概要
“`
create_table “date_spots”, charset: “utf8mb4”, collation: “utf8mb4_0900_ai_ci”, force: :cascade do |t|
t.integer “genre_id”
t.string “name”
t.datetime “opening_time”
t.datetime “closing_time”
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`
始業時間(opening_time)と終業時間(closing_time)がデートスポットごとに決

元記事を表示

OTHERカテゴリの最新記事