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

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

docker環境でvscodeのrubocop拡張が反応しない時の対処法

# はじめに
vscode の rubocop 拡張 [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop) を Docker 環境で使用したところかなり詰まったのでその備忘録です。
一人でも多くの方の参考になれば幸いです。

# 何も設定していない時のエラー(拡張入れただけ)
“`
command /Users/horisho/.rbenv/shims/rubocop returns empty output! please check configuration.
“`
ホストに rubocop は存在しないので、 docker コンテナに実行先を向けないといけません。

# 初期設定
https://github.com/misogi/vscode-ruby-rubocop/issues/112#issuecomment-673513315

こちらのIssueコメントを参考に設定をしました。
rubocop の実行ファイルを作成し、実行環境を Docker

元記事を表示

Rails の finder 系メソッドをちゃんと理解する

# はじめに
普段空気のように finder 系メソッドを使っているけれど、改めて finder 系メソッドは何があったっけ?というのと内部実装について見ていき、何となくしか理解していない部分をちゃんと理解したいと思います。

# finder 系メソッドの整理
今回は 2001/10/09 時点の最新の安定バージョン `v6.1.4.1` のソースを元に書いていこうと思います。

finder 系メソッドは

– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/core.rb
– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/relation/finder_methods.rb

あたりに詰まっています。

`core.rb` の方は `Person.find(1)` のようにモデルのクラスメソッドとして呼び出す場合で、 `finder_methods.rb` の方は `Pe

元記事を表示

Rails N+1問題への対処

## 課題
RailsのActiveRecordはRubyでデータベースとの問い合わせができる便利なツールである一方、発行されるSQLを意識しなくても済んでしまうため、効率の悪いクエリを発行していても気づかない危険性があります。Railsにおいては特にN+1問題という必要以上にデータベースに問い合わせをしてしまい、パフォーマンスを低下させてしまう問題がよく知られています。

## N+1問題とは?
N+1問題とは、「ループ処理の中で都度SQLを発行してしまい、大量のSQLが実行されパフォーマンスが低下する」という問題のことです。100件あれば100回、1000件あれば1000回、ループ処理の中で問い合わせすることになるので、いかにも非効率的です。馬鹿馬鹿しい初歩的なミスに聞こえますが、Railsを使用していると往々にしてこの問題が生じます。

では具体的なN+1問題の例を見ていきましょう。
まず、usersテーブルとpostsテーブルがあると仮定しましょう。

__groupsテーブル__

| id | name |
| —- | —- |
| 1 | A |

元記事を表示

Docker × rails6 × mysql8.0 環境構築

windowsで開発進めていたがMacbook(intel)買ったので改めて環境構築した。

# ファイルを作る

dockerfile

docker-compose.yml

entrypoint.sh

Gemfile

Gemfile.lock(空)

ファイルの書き方は公式ドキュメントを参考。
新しい技術にチャレンジする時ってqiitaに頼りがちだけど、とりあえず公式ドキュメント見てみる事を最近覚えました。

[https://docs.docker.com/samples/rails/](https://docs.docker.com/samples/rails/)

# railsアプリを作成

ターミナルで

“`ruby
docker-compose run web rails new . –force –database=mysql
“`

(— **force は既存のGemfileを上書きする)**

実行。

railsアプリができる。

Gemfileやdocckerfileが更新されているので、

“`ruby
docker-comp

元記事を表示

railsチュートリアル第七章 flash

###flash
ユーザー登録フォームが実際に動くようになった。
それにより登録することができるよになった。
登録完了後に表示されるメッセージを二度目以降に表示させないようにさせる。
それを使うには
“`flash“`という変数を使う。 ハッシュのように使う。
####ユーザー登録ページにフラッシュメッセージを追加する
app/controllers/users_controller.rb

“`rb
class UsersController < ApplicationController . . . def create @user = User.new(user_params) # 外部メソッドを使う if @user.save # 保存の成功をここで扱う。 flash[:success] = "Welcome to the Sample App!" # 成功時一度だけ表示されるメッセージ redirect_to @user # urlを指定して表示する # 保存成功したらu

元記事を表示

railsチュートリアル第七章 ユーザー登録成功

##ユーザー登録成功
新規ユーザーを実際にデータベースに保存できるようにし、ユーザー登録フォームを完成させる。
ユーザー情報は自動的にデータベースに登録させる。
ブラウザの表示をリダイレクトして、登録されたユーザーのプロフィールを表示
ウェルカムメッセージも表示させる。

###登録
“`rb
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path # signupのページにアクセス assert_no_difference 'User.count' do # ユーザー数が変わらないかをテストする post users_path, params: { user: { name: "", # ハッシュのハッシュのようになっているように見える

元記事を表示

railsチュートリアル第七章 失敗時のテスト

###失敗時のテスト
有効、無効のデータどちらでも正常にアプリが動くようにする。
アプリケーションの変更をするたびにテストを繰り返さなければならず大変である。
Railsではフォーム用のテストを書くことができ、こういったプロセスを自動化することができる。

今回は無効の送信をした時に正しい振る舞いについてテストを書いていく。

####新規ユーザー登録用の統合テストを生成する
統合テストのファイル名はusers_signup

“`
rails generate integration_test users_signup
“`

####無効なユーザー登録に対するテスト
test/integration/users_signup_test.rb

“`rb
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path # signupのページにアクセス

元記事を表示

Railsチュートリアルでbundle installがうまくいかないときは

# 簡潔にまとめます
– railsのバージョンやGemfileでのバージョン指定を確認しましょう
– エラーログで検索してみましょう
– Gemfileのバージョン指定を変更してみましょう

# 概要
ローカル環境でRailsチュートリアル6版の2週目に挑戦中です。3章まで終わりましたが、Gemfileの内容を更新した後のbundle install / updateが度々エラーになります。対処法と原因についてまとめてみます。

以下は今回出てきたエラーの一例です。

“`
$ bundle update

Fetching gem metadata from https://rubygems.org/…………
Resolving dependencies…
Bundler found conflicting requirements for the Ruby version:
In Gemfile:
Ruby

guard (= 2.16.2) was resolved to 2.16.2, which depends on

元記事を表示

動的と静的を学ぶ!

Webで様々なページを見たり、サービスを利用したりすることがあります!

そこには、静的と動的という分類があります!

それぞれの特徴を書いて行こうと思います!

#①.動的

動的とは、Twitterのように、常に最新のツイートを取得し表示する仕組みや、ユーザーごとで表示されるものが変わるような仕組みです!

そのような仕組みのサービスは、動的サイトや動的コンテンツと呼ばれます!

Webアプリケーションは、動的コンテンツであることがほとんどです!

#②.静的

静的とは、誰がいつ見ても、常に同じ内容が表示されるような仕組みです!

そのような仕組みのサービスは、静的サイトや静的コンテンツと呼ばれます!

HTMLとCSSで作成したWebページは、静的コンテンツです!

#③.まとめ

どちらも簡単に言うと、

動的コンテンツとは、ユーザーごとで表示されるものが切り替わるような仕組みのこと!

静的コンテンツとは、誰がいつ見ても、常に同じ内容が表示されるような仕組みのこと!

こんな感じですね!

基本的な事なので、これはしっかり把握しておこうと思います!

なにか説明が間違って

元記事を表示

WSL2(Ubuntu)環境下でのDockerを使ったRailsの開発環境構築するshellを作った

# 概要

初投稿です。
WSL2(Ubuntu)の環境下でDockerを使ったRailsの開発環境の記事が無くて、構築が面倒だったのでshellを作りました。

## 作成する開発環境
– Ruby 3.0.2
– Rails 6.1.4
– MySQL 8.0

## ソースコード
ソースコードは下記のとおりです。
[docker-rails.sh](https://github.com/sasami-pro/public_tools/tree/master/docker-rails)

# 使い方

## 前提条件
– WSL2(Ubuntu)
– Docker version 20.10.8以降
– Docker Compose v2.0.0-rc.1以降

## shellの実行

ディレクトリを作成しdocker-rails.shを配置します。

~~~sh
mkdir sample_app
mv docker-rails.sh ./sample_app/
~~~

作成したディレクトリへ移動し、docker-rails.shを実行します。

~~~sh
cd sam

元記事を表示

【Railsのアクション】newとcreateの違い

こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。

今回は、「Railsのアクション newとcreateの違い」というテーマで解説していきます。

#createアクション
レコードの新規作成するアクションです。

個々で言う作成とは、データベースにデータを保存するということだと考えてください。

#newアクション
新規投稿用の画面を表示するためのアクションです。

#開発環境
・Cloud9
・Ruby 3.0.0
・Rails 6.1.3.1

元記事を表示

MVCについてとブラウザからのリクエスト→サーバーへのレスポンスまでの流れ

##MVCについて
webでは、ブラウザ(Safari,Chomeなど)とサーバーの間で
ブラウザ→サーバへのリクエストと、それに対しての
サーバー→ブラウザへのレスポンスのやりとりが行われています。

その内部ではMVCが大きな役割を果たしています。

###MVCとは
ソフトウェアの設計モデルの一つで、機能をモデル・ビュー・コントローラーの3つの役割に分けて実装するという方法のことです。

###モデル・ビュー・コントローラーとは?
ではモデル・ビュー・コントローラーとはどのような役割を果たすものなのでしょうか?
それぞれの役割について説明します。

####モデル
コントローラーとデータベースとのやりとりを介している。ビジネスロジックの実装に関わっています。

####ビュー
DBから取得したデータなどを元にHTMLを作成する。ブラウザへの反映に大きく関与する。
####コントローラー
モデルの内容についての指揮をおこうなう。この中に実行したいアクションの内容が含まれている。
また、コントローラーの部分が肥大化してしまう傾向がある

##ブラウザからのリクエストからサーバーへのレ

元記事を表示

カラム数に制限を設ける

モデルに独自のバリデーションを書かずにコントローラー内で処理をする方法を考えてみました。

環境

ruby 2.6.5
rails 5.2
Mac OS

必要な gem 無し

テーブルは
Post : comment が 1対多になってます。

実装したいこと

userの投稿にたとえばコメントがあったとして、そのコメント数を制限する。
みたいな感じの機能です。

大雑把な流れとして
userが投稿詳細ページからコメントを追加

createアクションが動く

投稿に対するコメント数が条件より少ない場合、そのまま作成され
条件を超えた場合はflashと共に元のページにリダイレクトさせる

何を使うか

コメントのカラムには自身が持つ”id”の他に外部キーとして”post_id”を持たせています。
これによって「post_idがn番のコメント」と表現することができます。
今回数えたいのはまさにこのpost_idです。

情報を取得するメソッドはたくさんあるのでそのなかから最適なものを探します。

  • all
  • <

元記事を表示

【Docker】起動してもすぐ落ちるときの解決法

##環境
Docker version 20.10.7
docker-compose version 1.29.2

##状況
Dockerを起動してもすぐに落ちる

“`
% docker-compose up -d
Creating XXXXX_db_1 … done
Creating XXXXX_redis_1 … done
Creating XXXXX_worker_1 … done
Creating XXXXX_app_1 … done
Creating XXXXX_webpacker_1 … done
Creating XXXXX_web_1 … done

% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS N

元記事を表示

Rails 「link_to」と「image_tag」を使用して画像にリンクを持たせる 「link_to do」 使い方

# 概要
link_to の使い方で知らなかった方法があったので記録する

#link_to
### 基本的な使い方

“`ruby
link_to(リンクテキスト, パス [, オプション, HTML属性 or イベント属性])
“`

https://railsdoc.com/page/link_to

ex)

“`ruby
link_to “Top”, “root_path”(URLでもok)
“`

# オプション

### ・methodを指定する
methodをdeleteにすれば削除のアクションを実行できる

“`ruby
<%= link_to “削除”, user_path(params[:id]), method: :delete %>
“`

### ・属性を指定する
class属性を指定する

“`ruby
<%= link_to "Top", "root_path", class: “nav-menu" %>
“`

# link_to doでブロックを囲む
・HTMLやimageタグを`do〜end`内に記載することによってクリックした時に

元記事を表示

Railsのセキュリティについて

Railsのセキュリティについて勉強した時のメモです。

# セッションハイジャック
### セッションハイジャックとは?
セキュリティに問題のあるネットワークを使用するとCookieの内容を盗み取られる可能性がある。
Cookieの中にセキュリティIDがあるのでそれを奪われると代わりにログインされてしまうこと。

### 対策
Railsには`config/environments/production.rb`に

“`ruby:config/environments/production.rb
config.force_ssl = true
“`
というオプションがありこれを追加することでssl通信(セキュリティ的に安全な通信)しか受け付けないようにできる。

# CSRF
### CSRFとは?
Cross Site Request Forgeriesと言い、攻撃者が他人のサイトにコードを埋め込むことでユーザーが操作した際に意図しない挙動を生み出す攻撃のこと。
例えば、ECサイトで戻るボタンが購入ボタンになっていて、戻るを押すと決済されていたみたいな感じ。

### 対策
p

元記事を表示

【Rails4.2】Postgresqlの配列リテラルを配列に変換

## 背景

– 少々古いプロジェクトでPostgresqlの配列型が使われていた。
– ActiveRecord経由であれば取得カラムは自動で配列に変換されるが個別に変換したい場合があった

## 概要

– Rails側で以下の変換を行いたい
– 半角スペースや改行などの要エスケープ文字がある要素だけダブルクォート囲みされたりしている
– アポストロフィーエス `’s` なども少々変換が必要らしい

input | output
— + —
`{}` | `[]`
`{1,2,3}` | `[1,2,3]`
`{赤,青,緑}` | `[“赤”,”青”,”緑”]`
`{“徳川 家康”,豊臣秀吉,”織田 信長”}` | `[“徳川 家康”,”豊臣秀吉”,”織田 信長”]`

## 実装

モデルのconcernを追加する形にしてみた

“` ruby:app/models/concerns/varying_array_parsable.rb
module VaryingArrayParsable
extend ActiveSupport::Concern

class

元記事を表示

[Rails]validatesについて

##初めに
####なぜこの記事を書きたかったのか
modelでなにをするかまとめたかったから

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)Validatesとは**
**2)できることリスト+使い方**
**3)最後に**

##Validatesとは
![markmodelsample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102030/043bf1c9-76ac-6808-3db4-c310a3e632c4.png)
**イメージは、controller内で設定した内容にルールをつけてDATABASEと情報のやり取りができる機能を持つ。**

##条件が複数ある場合におすすめな書き方!
**[+α]with_option内に別のwith_opt

元記事を表示

[Rails]よくつかう正規表現について

##初めに
####なぜこの記事を書きたかったのか
自分がよくつかう正規表現のリストのチートシートを残したかった。

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)正規表現とは?**
**2)条件に合わせた正規表現リスト**
**3)最後に**

##正規表現とは?
####イメージは、作成した記入欄の文字、数字、記号に対してルールを設けられる。
####不安なときもしくは試したい正規表現があれば”正規表現チェッカー”で検索すると試せれるよb

##条件に合わせた正規表現リスト
####携帯電話の正規表現1

“`ruby
/^0[789]0-\d{4}-\d{4}$/
“`
####郵便番号の正規表現

“`ruby
/^\d{3}-\d{4}$/
“`

####全角の正規表現

“`ruby
/\A[ぁ-んァ-ン一-龥々]/

元記事を表示

[Rails] 退会機能(論理削除)

ポートフォリオに実装した退会機能のメモです。

# 実装
### Userモデルにカラムを追加
Userが退会済みかどうかを判断するためのbooleanカラムを追加していきます。
ちなみにUserモデルは`devise`で追加したことを想定しています。

“`terminal:ターミナル
rails g migration AddIsValidToUsers is_valid:boolean
“`

“`ruby:db/migrate/20210617022549_add_is_valid_to_users.rb
class AddIsValidToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :is_valid, :boolean, default: true, null: false end end ``` ```terminal:ターミナル rails db:migrate ``` ### 退会処理 退会画面と退会処理を作っていきます。 ```ruby:confi

元記事を表示

OTHERカテゴリの最新記事