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

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

Railsのvalidateを自作する

# はじめに
[前回の続き](https://qiita.com/smbbc20/items/952a33501343614f197f)で「Ruby on Rails 5 速習実践ガイド」のアウトプットを行うための投稿です。
今回は、モデルのバリデートを自作する方法を書いていきます!例として、Taskモデルのnameカラムに、ハイフンが含まれないようなvalidateを作成します。

# 目次

1. [自作validateのメソッドを作成](#Chapter1)
1. [自作validateを呼び出す](#Chapter2)
1. [エラーメッセージを表示する](#Chapter3)
1. [参考文献](#reference)



# 自作validateのメソッドを作成

“`task.rb
private
def validate_not_including_hyphen
errors.add(:name, ‘にハイフンを入れないでください!’) if n

元記事を表示

RailsでFlashメッセージを表示させる

# はじめに
[前回の続き](https://qiita.com/smbbc20/items/4953a708e752cc806b93)で「Ruby on Rails 5 速習実践ガイド」のアウトプットを行うための投稿です。
今回は、ページ遷移をするときにFlashメッセージを表示させる方法についてお伝えします!

# 目次

1. [redirect](#Chapter1)
1. [render](#Chapter2)
1. [メッセージを表示](#Chapter3)
1. [reference](#reference)



# redirect_to
redirect_toを以下のように記述します。

“`
redirect_to パス, notice: “#{name}を登録しました”
“`

notice以外は、デフォルトでalertを渡すこともできます。

“`
redirect_to パス, alert: “登録失敗です”
“`
Railsでフォロー機能を実装する

# なぜこの記事を書いたのか
Railsでのフォロー機能について説明している記事はたくさんあります。

しかし、「自分**が**フォローしているユーザーの一覧ページ」と「自分**を**フォロしているユーザーの一覧ページ」までの実装手順を説明している記事は少なく感じました。

この「フォロー一覧」と「フォロワー一覧」ですが、**Relationshipテーブルのカラムをよく考えて命名**しておかないと、ややこしくなることがあります。

“`following“`, “`follower“`, “`follow“`, “`followed“`など様々な命名方法が記事によって混在していますが、一番混乱しにくい命名方法で解説されている記事が少なかったため、改めて記事を作成することにしました。

まず結論から言います。

この記事では、**フォローする側は“`following“`**、**フォローされる側は“`follower“`**としておくとよく覚えておいてください。

普通の感覚だと、『フォローする側が“`follower“`じゃないの?』と感じるかもしれませ

元記事を表示

ちょっと一癖あるRSpecを使ったモデルの単体テストコード 〜ユーザー登録

#はじめに
 完全に自分用です。モデルの単体テスト(ユーザー登録)の一癖あるコードを残しておきます。

##

###メールアドレス

“`ruby:user_spec.rb
it ‘メールアドレスは、@を含む必要があること’ do
@user.email.delete!(‘@’)
@user.valid?
expect(@user.errors.full_messages).to include(“メールアドレスは不正な値です”)
end
“`
###パスワード

“`ruby:user_spec.rb
it ‘パスワードは、6文字以上での入力が必須であること’ do
@user.password = ‘12345’
@user.password_confirmation = @user.password
@user.valid?
expect(@user.errors.full_messages).to include(“パスワードは6文字以上で入力してください”)
end
“`

“`ruby:user_spec.rb
it ‘パスワードは、

元記事を表示

Rails「Not Null制約」と「バリデーション(presence: true)」 メモ

勉強していて、2つの動きに違いがあることに気が付き
更に同様の内容について、調べられているQiitaの記事も見つけたため
自分のローカルでも動作を確認しながらメモ程度にまとめてみたいと思います

## まずは、投稿用の簡易アプリを作成する

“`rb:app/controller/posts.controller.rb
class PostsController < ApplicationController def index @posts = Post.where(user_id: @user.id) end def new @posts = Post.new end def crate @posts = Post.create( title: params[:post][:title], contents: params[:post][:contents], user_id: @user.id ) if @posts.save redirect_to posts_i

元記事を表示

ngrokの導入方法

## 開発環境
macOS Catalina 10.15.7
Ruby 2.5.3
Rails 5.2.3

## 概要

業務の中でngrokを使う場面があったので、ngrokの導入方法についてまとめていこうと思います。

## 手順

※ 下記のようにHomebrewを用いるやり方もありますが、今回の自分のやり方では、Homebrewは使いません。

> ngrokの利用方法
https://qiita.com/hirokisoccer/items/7033c1bb9c85bf6789bd

① 下記のリンクより、OSに合わせてダウンロードを行ってください

https://www.notion.so/ngrok-dea8e5744d0e4c54851c5c4136950fbb#7d85e79927d0473da1157c47597a12f2

② ダウンロードが終了したら、zipファイルを解凍し、自分の使いやすいディレクトリに置いておいてください。
自分は、コマンドラインでどこからでも使えるように、パスが通っている/usr/local/binにファイルを設置しました。

元記事を表示

【Ruby On Rails】脱root_path! ネスト”子”のビューから、ネスト”親”の:showへリダイレクト記述法

# 記事について
備忘録です。

routes.rbにて親子関係を作った場合の、子コントローラーのredirect_toの書き方について記します。

私は今までネストされた子コントローラーのcreateアクションや、updateアクションのリダイレクト先をroot_pathで済ましていました。

脱root_pathを目指します。

#前提

親:contents
子:descriptions

“`ruby:routes.rb
root to: ‘contents#index’

resources :contents, only: [:index, :new, :create, :show, :edit, :update] do
resources :descriptions, only: [:new, :create, :edit, :update, :destroy]
“`

上記のように、子には:showが指定されていないこととします。
※便宜上、onlyオプションで記述しています。

rails routes↓
![スクリーンショット 2020-12-29 18

元記事を表示

【Rails、JavaScript】いいね機能を実装(同期・非同期通信)

# 概要
いいね機能の実装方法についてまとめます。

#参照
同期通信のいいね機能実装は以下の本を参考に、その後の非同期通信化は以下の記事を参考にして行いました。
ありがとうございます。

### 本

[改訂4版 基礎Ruby on Rails 基礎シリーズ](https://www.amazon.co.jp/%E6%94%B9%E8%A8%824%E7%89%88-%E5%9F%BA%E7%A4%8ERuby-Rails-%E5%9F%BA%E7%A4%8E%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%BB%92%E7%94%B0%E5%8A%AA-ebook/dp/B07GXB2ZSW/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=rails+%E5%9F%BA%E7%A4%8E&qid=1609224169&sr=8-2)

### 記事
[【Rails】いいね機能完全版!同期いいね、いいね数の表示、非同期いいね、アイコン表示、それぞれ

元記事を表示

個人アプリ開発日記 #1

#目次
[1.はじめに](#1-はじめに)
[2.内容](#2-内容)
[3.おわりに](#3-おわりに)

#1. はじめに
私はプログラミング初学者ですが、Qiitaでは今まで自分が詰まった
エラーの解決方法や、Ruby/Railsの小技に関する記事を10本強投稿してきました!

来月から転職活動を本格的に始めるにあたり、
1ヶ月程前からポートフォリオ用に個人アプリを制作しています。
自分の制作過程をアウトプットすることで、理解を深めてより良い
作品作りに活かしたいと考え、今日から開発日記として投稿していきます。

アプリを作っているけど中々良いアイデアが浮かばない、人に説明する時の
まとめ方がよく分からない。。という人の役に立てればこの上なく嬉しいです。

初回の今日は、自分が現在制作しているアプリの概要を簡単に説明していきます!

#2. 内容
以下の項目に箇条書きで回答していきます。

1) アプリを一言で言うと
2) キャッチコピー
3) ターゲット(メインターゲット、サブターゲット)
4) アプリでできること
5) このアプリがあると感じる嬉しいこと

1) アプリを一言

元記事を表示

Rails チュートリアル 第10章 備忘録

第10章の備忘録です。

##目次
[1 新しいタブでリンクを開く方法](#1-新しいタブでリンクを開く方法)
[2 PATCHリクエストの送り方](#2-patchリクエストの送り方)
[3 テストreloadする必要性](#3-テストreloadする必要性)
[4 パスワードの例外処理](#4-パスワードの例外処理)
[5 認証と認可の違い](#5-認証と認可の違い)
[6 フレンドリーフォワーディング](#6-フレンドリーフォワーディング)
[7 Faker gem](#7-faker-gem)
[8 ページネーション](#8-ページネーション)
[9 確認ログの出し方](#9-確認ログの出し方)

##1 新しいタブでリンクを開く方法
クリック先のページを新しいタブで開きたい時は、target属性を下のコードのように追加する。
また`target=”_blank”`だけだとフィッシングサイトなどを導入される恐れがあるので、`rel=”noopener”`属性を下のコードのように追加する必要がある。

“`app/views/users/edit.html.erb
.

元記事を表示

【Rails/CarrierWave/MiniMagick】縦長と横長専用のCSSクラス名をアップロードした画像のimgタグに与える

# はじめに

ユーザーがアップロードする画像が縦長と横長がバラバラのため、画像一覧が美しく並ばない問題がありました。

![スクリーンショット 2020-12-29 18.48.37.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261027/ef87c00c-dbc5-c77d-b62a-75b82e71575d.jpeg)

その問題を解決するために、縦長と横長専用のCSSクラス名を画像に与え、画像を正方形にマスクする機能を追加しました。

その実装手順を記していきます。

# 前提/実装環境

– 開発環境はDockerを使用
– Ruby:2.6.3のDockerイメージを使用
– Ruby on Rails:6.0.3
– 「[CarrierWave:2.1.0](https://github.com/carrierwaveuploader/carrierwave)」「[MiniMagick:4.10.1](https://github.com/minimagick/minimagick

元記事を表示

Next.js + Rails(API) + Mysql on DockerのHello Worldするばい!

# Goal
こんにちは。Nuxt.jsとRailsのDocker環境構築の記事はたくさんあったのですがNext.jsの記事がなかったので試行錯誤で環境構築した記録です。
Qiitaに投稿することもあまりないので記事タイトル・記事構成なんか @at-946 様を参考にさせていただいております。

– 参考記事
「[Nuxt.js + Rails(API) on DockerのHello Worldするべ!](https://qiita.com/at-946/items/08de3c9d7611f62b1894)」

# 1.Dockerの準備
準備するファイル構成は以下のようにしました。

“`text:DirectoryStructure
/
|–front/
| |–Dockerfile
|–back/
| |–Dockerfile
| |–Gemfile
| |–Gemfile.lock #空ファイル
|–docker-compose.yml
“`

“`dockerfile:front/Dockerfile
From node:

元記事を表示

[Rails] DB設定(mysql)設定、VSCodeでのRubocop、便利な拡張機能

## 背景
Railsアプリで使用するDB設定(mysql)をまとめました。
また、VSCodeでのRubocop設定、その他便利な拡張機能をまとめました。

私の環境ではWindows上でVSCodeを使用し、WLS(Ubuntu)を操作しています。
WLSを使っている理由は、環境構築方法が Mac とかなり近いからです。

また、本記事はRailsのインストールができていることを前提とします。
下記に前提となるところの環境構築をまとめたので、参考にしていただければと思います。
[[Rails] WindowsのWSL2(Ubuntu、VSCode)にRailsをローカルインストールしてgitコマンドでgithub(master)にpushする](https://qiita.com/Taka5689/items/7f209ffb46906cc86be6)

## DB設定(mysql)
① 下記コマンドを実施し、mysqlをインストールします。

“`
sudo apt install mysql-server mysql-client
“`
② 次に下記コマンドでmysqlのラ

元記事を表示

[Rails] タイムゾーン情報のない UTC の日付文字列をローカルのタイムゾーン (JST など) に変更する

`2020/01/01 00:00:00` という文字列がある。これを UTC の日付文字列だと解釈してローカルのタイムゾーン、例えば JST の時刻オブジェクトに変換したい。

“`rb
Time.zone.name
#=> “Tokyo”
“`

以下だと `2020/01/01 00:00:00` のままタイムゾーンが JST に変わるだけ。

“`rb
‘2020/01/01 00:00:00’.in_time_zone
#=> Wed, 01 Jan 2020 00:00:00 JST +09:00

Time.zone.parse(‘2020/01/01 00:00:00’)
#=> Wed, 01 Jan 2020 00:00:00 JST +09:00
“`

そこでこうする!

“`rb
time_zone = ActiveSupport::TimeZone.new(‘UTC’)
time_zone.parse(‘2020/01/01 00:00:00’).in_time_zone
#=> Wed, 01 Jan 2020 09:00:00 JST +09:

元記事を表示

form形式でレスポンスを返したい時のクラス設計

## 背景

現在開発中のシステムのバックエンドを担当しており、一部のAPIレスポンスを 「form形式で返す」というような実装をしました。この時に用いた設計が汎用的だなと思ったので記事にしようと思いました。

本質的な意味合いは異なりますが、見方によってはデザインパターンでいうアダプタっぽいかなと思っています。正しいかどうかは定かではないです。。

言語はruby、フレームワークはrailsを想定しています。
## 要件

### Testsテーブル

| カラム | 型 |
|:-:|:-:|
| id | int8 |
| first | varchar(255) |
| second | varchar(255) |

上記のようなテーブルがあり、その1レコードを以下のようなJSONレスポンス形式で返したいとします。

“`json
{
“form_items” : [
{
“item_name” : “first”,
“value” : “hoge” # firstカラムの値
},
{
“item_name” : “second”,

元記事を表示

gem Fakerでリアルなダミーデータを作るよ

### 何をしたか
Railsの課題を実施しています。アウトプットを何かするまでが課題なのですが…。
スクールを卒業して以来、1回も触っていなかった、gem `Faker`が出てきたので、こちらについて、使用方法をまとめたいと思います。

尚、実行環境は下記の通りです。

– `Rails 5.2.3`
– `Ruby 2.6.0`

### 導入方法

まずは[公式の情報](https://github.com/faker-ruby/faker)の確認から。[公式のノート](https://github.com/faker-ruby/faker#note)によると、

– デフォルトではユニークなデータを生成するとは限らないから、ユニークなデータが欲しい時にはオプションをつけてね。
– `master` ブランチには、まだリリースされていないデータが含まれることがあるから、利用可能なメソッドはREADMEで確認してね。

とのことだそうです。了解ですー

インストールはとても簡単で、Gemfileに以下を記入し、

“`Ruby:Gemfile
gem ‘faker’
“`

元記事を表示

「Webpacker::Manifest::MissingEntryError」対策

#はじめに
Rails 「Webpacker::Manifest::MissingEntryError」エラーの対策について、
備忘録として投稿します。

#開発環境
・cloud9
・Rails 6.1.0

#エラー内容
“`ruby:application.html.erb



Myapp

<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

元記事を表示

ドライバがSeleniumのテストでPOSTしたくなったらドライバをRack::Testに変える

## 結論

[`Capybara.current_driver=`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara#current_driver=-class_method)というメソッドを使うとテストの途中でもWebDriverを切り替えられる

## 問題

CapybaraのドライバにSeleniumを用いたWebDriverを指定してfeature specを実行すると、WebDriverを通じて実際にブラウザを動かしてテストできる。

OAuthによるアクセストークンの取得のように、ブラウザで操作したあと、さらにAPIコールすることで完結するシナリオをひとまとまりのexampleにしたいことがある。しかし、実際のブラウザと同じで、いきなりPOSTやPUTをリクエストとして発行できない。

## 解決策

exampleの途中で`Capybara.current_driver=`を使ってWebDriverを`:rack_test` ([Rack::Test](https://github.

元記事を表示

Circle CI環境構築

# はじめに

本記事ではCircle CI初心者の僕が、Circle CIのクラウド環境での実行(gitでpushするたびにテストを実行する)方法についてまとめていきます。

# Circle CIの環境構築

## 1)GitHubとの連携

Circle CIではGitHubとBitbucketの2つのサービスと連携できますが、GitHubとの連携のほうが多いと思うので、こちらでのやり方を記載していきます。

やり方としては**GitHubにログインした状態**でCircleCIのサイトから連携ボタンを押して、手順に沿って作業を進めてください。

## 2)プロジェクトの追加

GitHubでの認証が完了したらGitHubのプロジェクト(リポジトリ)をCircleCIでも作成します。
個人リポジトリかOrganizationリポジトリか、プライベートリポジトリでプロジェクト追加のやり方が異なるようですが、ここでは、個人+Publicリポジトリでのやり方を記載します。

## 3)CircleCIの実行環境

最終的にはクラウド環境でのCircleCI実行をゴールとします。
その

元記事を表示

scopeとwhere(“LOWER(message) LIKE ?”, “%#{term.downcase}%”)

#なんだこの記述は、、!?
RSpec学習には以下の有名教材があります。
[Everyday Rails – RSpec による Rails テスト入門 テスト駆動開発の習得に向けた実践的アプローチ](https://leanpub.com/everydayrailsrspec-jp)

Aaron Sumnerさんという方が書いた本を日本語訳されています。
翻訳した方々の中にはあの「[プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%B

元記事を表示

OTHERカテゴリの最新記事