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

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

【Rails】rubocop 導入編(2020年5月版)

# 環境

– ruby 2.6.6
– Rails 5.2.3
– [rubocop 0.82.0](https://github.com/rubocop-hq/rubocop)
– [rubocop-rails 2.5.2](https://github.com/rubocop-hq/rubocop-rails)
– [rubocop-rspec 1.39.0](https://github.com/rubocop-hq/rubocop-rspec)
– [rubocop-performance 1.5.2](https://github.com/rubocop-hq/rubocop-performance)

# インストール

“`ruby:Gemfile
group :development do
gem ‘rubocop’, require: false
gem ‘rubocop-performance’, require: false
gem ‘rubocop-rails’, require: false
gem ‘rubocop-rspec’
end

元記事を表示

RailsでPostgreSQLに接続するまでに必要な知識

## 概要
RailsのデータベースとしてPostgreSQLを使用しようと思ったのですがかなり沼にハマったので、自分が必要だと感じたものを残します。
主にコマンドの解説になっております。
Railsとの接続手順については詳しい記事があるので、そちらを参考にしてください。(参考の節にリンクがあります)
まともに学習したわけではないので、理解できていない部分もあります。
間違いがあればご指摘よろしくお願いします。

## 環境
macOS Catalina
Ruby : 2.7.1
Rails : 6.0.2.2
PostgreSQL : 12.2
Homebrew 2.2.14

## PostgreSQLのインストール
PostgreSQLを起動した状態でRailsと接続する必要があるのでインストールをします。
ここではHomebrew経由の方法です。

“`zsh
$ brew install postgresql

$ postgres –version
postgres (PostgreSQL) 12.2
“`

## PATHの設定

“`zsh
# PostgreS

元記事を表示

MVCモデルをもう一度振り返ろう!

#MVCモデルをもう一度振り返ろう!
MVCモデルとはモデル(M)、ビュー(V)、コントローラー(C)の3つに役割を分けて開発を行う設計パターンです。
railsなどもMVCモデルに基づいて作られています。

##MVCモデルのそれぞれの役割

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629620/068ffd73-21b4-e199-7b2d-187a0e72aa86.png)

MVCモデル参考イメージ出典:https://www.katonobo.com/entry/what_is_MVC

・モデル(model):表示や入力に関連しない処理
・ビュー(view):表示や入力に関する処理
・コントローラー(controller):ビューとモデルの橋渡し役

という役割とされています。
役割を聞いただけですとよくわからなかったのですが、私のイメージですと、、、
・モデルはデータをコントローラーに引き渡す役
・ビューは見た目の役
・コントローラーは上記の理解

といった解釈をして

元記事を表示

備忘録 render partialで部分テンプレートを表示しよう

# 共通のビューを部分テンプレートを使って表示

renderメソッドのパーシャルオプションを使って共通部分を表示しましょう。

部分テンプレートとしてビューファイルを作成する時は \_hogehoge.html.erbのようにファイル名の前に_(アンダースコア)をつける必要があります。
次のように書くと部分テンプレートをビューに表示できます。

“`ruby
render partial: ‘hogehoge’
“`

別ディレクトリに部分テンプレートのデータがある場合は

“`ruby
render partial: ‘ディレクトリ名/hogehoge’
“`

で呼び出せます。

### localsオプション

localsオプションを使うと部分テンプレート内で使う変数の定義をすることができます。

“`ruby
render partial: ‘ファイル名’,locals:{ ‘部分テンプレート内で使う変数’: ‘変数に入れる値’ }
“`

変数は複数指定することも可能です。

“`ruby
render partial: ‘ファイル名’, locals:{

元記事を表示

【Ruby on Rails】RSpecとShoulda Matchersを導入メモ

## RSpec設定

“`ruby:Gemfile
group :development, :test do
gem ‘rspec-rails’
end
“`

“`
rails g rspec:install
“`

“`:.rspec
–require spec_helper
–format documentation
“`

“`ruby:config/application.rb
config.generators do |g|
g.test_framework :rspec,
fixtures: false,
view_specs: false,
helper_specs: false,
routing_specs: false
end
“`

#### Spring設定
“`ruby:Gemfile
group :development, :test do
gem ‘spring-commands-rspec’
end
“`

“`
spring binstub rspec
“`

## Fa

元記事を表示

備忘録 Flashメッセージを使いこなそう

# Flashメッセージで次のリクエストにデータを伝える

railsのredirect_toメソッドにflashを使うことで次のリクエストにデータを伝えることができる。(同じリクエスト内でもできるが後述)

“`ruby
redirect_to リダイレクト先のURL, notice: ‘ここのデータを送れるよ!’
“`

次のように2行で書いても、同じ。

“`ruby
flash[:notice] = ‘ここのデータを送れるよ!’
redirect_to リダイレクト先のURL
“`

redirect_toのオプションに渡せるflashのキーはデフォルトでは:noticeと:alertのみとなっている。
次のようにflashキーの値にオリジナルのデータをハッシュで渡すことでプチカスタマイズができる。

“`ruby
redirect_to リダイレクト先のURL, flash: {hogehoge: ‘ここのデータを送れるよ!’}
#=> 次のリクエストではflash.hogehogeで参照できる
“`
また、noticeとalertは以下のようにメソッドの形でデ

元記事を表示

Railsのhtmlエスケープ方法比較

Ruby on Railsでユーザが入力したテキストを改行コードを含めて、そのまま表示したい場合があります。或いは、htmlのタグを完全に外したり、一部有効なまま残したりしたい場合もあります。

そうした場合のアプローチ比較のつもりで検証したのですが、ほとんどの場合、そのまま(何もしない)か、`sanitize`を使えば良いのではないかと思います。

“`erb

<% text = "1\n2\n3 >= a” %>
<%= text %> <%# そのまま(タグはエスケープされる) %>


<%= h(text) %> <%# そのままと一緒(使う意味ない?) %>


<%= simple_format(text) %> <%# 勝手に改行 & pタグが付く(お好みで..) %>


<%= strip_tags(text) %> <%# タグが消える %>


<%= sanitize(text) %> <%# 危ないタグだけ消える %>


<%= sanitize(text.gsub("\n","

元記事を表示

gem, bundlerを自分なりに解説してみる

##はじめに
今回が初投稿です。Progateである程度勉強した次はRailsチュートリアルだー!と思い第1章から進めるもいきなりgem?bundle?とよくわからない単語が…。言われるがままにコマンドを入力していくも結局これ何やってるんだろうと思ったので自分なりに調べて解説してみます。

##gemとは
まず、gemという単語には以下の2つの意味があるようです。
・Rubyライブラリを管理するシステム(RubyGemsのことを指す)のコマンドの名称のこと。
・それぞれのライブラリのこと

ライブラリとは、いちいち0からプログラムを組むのは面倒なので、汎用性の高い機能をひとまとまりにしたものです。つまりgemとはこのライブラリを管理するツールでもあるし、ライブラリそのものを指す言葉でもあるということですね。驚くことに、今学習しているRails、これから説明するbundlerもgemのなかのひとつのようです。

##bundlerとは
先程、RubyGemsはライブラリであるgemを管理するシステムと説明しましたが、最近では「bundler」というライブラリ管理ツールを使うことが多いよう

元記事を表示

TECH CAMP 4週目

TECH CAMPも4週目を終え、課題であるChat-space制作の実装もひとまず完了。

【学習内容】
・ユーザー管理機能実装
・グループ作成編集機能実装
・メッセージ送信機能実装
・テスト
・非同期通信機能実装
・インクリメンタルサーチ実装
・自動更新機能実装

ところで、プログラミング学習時に皆さんは音楽を聴きますか?集中力を高める為や、気分を上げる為に聴く方は多いでしょう。私はDREAM THEATERというアメリカのバンドが好きでよく聴いています。自分自身ギターを弾くのですが、このDREAM THEATERは高度な演奏力や音楽理論を駆使した楽曲の組み立て方が魅力的で、特に楽器演奏者にファンが多いようです。自分もそれに影響を受けて10代の頃は楽典やなんかで音楽理論をかなり勉強し、今でも曲を作っています。
実は5月に来日コンサートがある予定だったのですが、このご時世もちろん延期。しかも、行く予定だった福岡公演のみ中止という悲しい現実が‥。チケット払い戻ししました‥(良い席取れてたのに‥)。その反動で今週は学習中かなり聴きましたね。

・ユーザー管理機能実装
gemのdevise

元記事を表示

fields_forについて

#背景
便利なメソッドではあるがイマイチ使いこなせてないと思い、概要を調べ備忘録としてまとめた。

##fields_forとは
親モデルに紐付いた子モデルのデータを編集するときに使用します。
もう少しわかりやすく言うと、form内で異なるモデルを編集することができるということです。
特に画像を扱うときに使うことが多いかと思います。。(多分)

##使い方

####コントローラー
「new」も「build」もインスタンスを生成するメソッドだが、Railsの慣習的にモデル同士の関連付けの際は「build」を使う。

“`users_controller.rb
省略
def new
@user = User.new #空のインスタンスが生成される
@user.photos.build #UserモデルとPhotoモデルの関連付け
end
省略
“`

####モデル
Userモデルの子に値するPhotoモデルを通して、photosテーブルに写真を保存する

“`user.rb

class User < ApplicationRec

元記事を表示

cookieでログインできるかRSpecでテストしてみた

rails6でログインしたら永続cookieができて、そのcookieによって再度ログインしなくてもログイン状態になるかのsystem specでテストしてみた。railsチュートリアルでいうと9章。多分。

ここではログアウトと表示されているリンクがあればログイン状態とする。

# 結論
“`sessions_spec.rb
require ‘rails_helper’
describe “Sessions”, type: :system do
let(:user) { FactoryBot.build(:user) }

it “cookieがある場合はログイン状態になること”, focus: true do
user.save
test_log_in
show_me_the_cookies
expire_cookies
show_me_the_cookies
visit current_path
show_me_the_cookies
expect(page).

元記事を表示

rails s が実行できなくて困ってます。力を貸してください

スクリーンショット 2020-05-02 16.55.50.png
gemやbundleをアップデートしてもrails s を実行したときにこのようなエラーが出ます。
解決方法を教えて下さい。お願いします。

元記事を表示

[Rails]パスワードのバリデーションに正規表現を使用してみた[format]

#はじめに
今回は、正規表現でパスワードのバリデーションをしてみました。
railsではformatというバリデーションヘルパーで正規表現を使用することができます。
求めるパスワードの条件として「半角6~12文字で英大文字・英小文字・数字それぞれ1文字以上含む」でないと登録できないようにしました。
実行結果はRSpecのモデルのテストで確認していきます。

###参考にさせていただいた記事等
[言語別:パスワード向けの正規表現](https://qiita.com/mpyw/items/886218e7b418dfed254b)
[パスワード向け正規表現 /^(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}$/i を解読する](https://qiita.com/momotaro98/items/460c6cac14473765ec14)

###前提条件
すでにユーザー作成機能作成を作成済みとします。
私はrailsチュートリアルで作成したログイン機能を使って進めました。
完成したもの先に記載するしておきます。

“`ruby:/app/model/user.

元記事を表示

devise

この記事は初学者が記載しております。

## deviseの使い方を詳しく書く

gemfile

“`
gem ‘devise’
“`
ターミナルにて

“`
bundle install
“`

“`
rails g devise:install
“`

####作成されるfile

config/initializers/devise.rb
config/locales/devise.en.yml

rails g devise コマンドをターミナルにて

“`
rails g devise user
“`
####作成されるfile

app/models/user.rb
db/migrate/2014**********_devise_create_users.rb
test/fixtures/users.yml
test/models/user_test.rb

config/routes.rbに以下の様な記述が自動的に追記されます。

“`
Rails.application.routes.draw do
devise_for :users

元記事を表示

dockerってなんやねん!!

#dockerについて
dockerについてわかった基本的な事を書いていきます。
頭の中の整理のためでもある。

##dockerってなんぞや
1、環境設定の手間を省ける。(dockerイメージ)
2、軽量で高速に起動、停止ができる。(dockerコンテナ)

###解説
**1、dockerイメージの解説**
作成したDockerイメージを他の人に渡して使ってもらうことで、各自の環境のバージョンずれ防止や、開発環境準備の短縮化にもつながる。新規メンバ参画時のコスト削減や、環境依存問題を減らせる。

Dockerイメージとは、環境のスナップショットで,Imageを起動することで環境を再現できる。
つまり、Dockerがなければ、他の人に作業をしてもらう際に環境のバージョンを変える手間が生じるが、開発工程からDockerを活用していくことで短縮化することができる。

**2、dockerコンテナの解説**
dockerコンテナはVM(仮想マシン)と比べるとオーバーヘッド([無駄な処理](https://wa3.i-3-i.info/word12471.html))が少ない。(docke

元記事を表示

フリマアプリにおける商品詳細ページのコメント機能〜コード全文〜

“`ruby:items/show.html.haml
-# ===================================
-# コメント全体
-# ===================================
.commentBox
.comment_list
– if user_signed_in?
– @commentALL.each do |comment|
– if comment.user_id == current_user.id
-# ===================================
-# コメントユーザーとログインユーザーが同一の場合
-# ========================

元記事を表示

フリマアプリにおける商品詳細ページのコメント機能(第6回)〜ajax編〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# 商品詳細ページにコメント機能を実装しました。
全部で7回に分けて記事を投稿しています。

|内容 | url |
|:—————–|——————:|:—————————–:|
| 第1回 | モデル、マイグレーション編 | https://qiita.com/drafts/03108801146e65d58413/edit |
| 第2回 | ルーティング編 | https://qiita.com/sho_U/items/5c829b3060be2cce919a |
| 第3回|コントローラー編|https://qiita.com/sho_U/items/85

元記事を表示

フリマアプリにおける商品詳細ページのコメント機能(第5回)〜jquery編〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# 商品詳細ページにコメント機能を実装しました。
全部で7回に分けて記事を投稿しています。

|内容 | url |
|:—————–|——————:|:—————————–:|
| 第1回 | モデル、マイグレーション編 | https://qiita.com/drafts/03108801146e65d58413/edit |
| 第2回 | ルーティング編 | https://qiita.com/sho_U/items/5c829b3060be2cce919a |
| 第3回|コントローラー編|https://qiita.com/sho_U/items/85

元記事を表示

フリマアプリにおける商品詳細ページのコメント機能(第4.2回)〜ヴュー編(インプットフォーム)〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# 商品詳細ページにコメント機能を実装しました。
全部で7回に分けて記事を投稿しています。

|内容 | url |
|:—————–|——————:|:—————————–:|
| 第1回 | モデル、マイグレーション編 | https://qiita.com/drafts/03108801146e65d58413/edit |
| 第2回 | ルーティング編 | https://qiita.com/sho_U/items/5c829b3060be2cce919a |
| 第3回|コントローラー編|https://qiita.com/sho_U/items/85

元記事を表示

フリマアプリにおける商品詳細ページのコメント機能(第4.1回)〜ヴュー編(一覧表示)〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# 商品詳細ページにコメント機能を実装しました。
全部で7回に分けて記事を投稿しています。

|内容 | url |
|:—————–|——————:|:—————————–:|
| 第1回 | モデル、マイグレーション編 | https://qiita.com/drafts/03108801146e65d58413/edit |
| 第2回 | ルーティング編 | https://qiita.com/sho_U/items/5c829b3060be2cce919a |
| 第3回|コントローラー編|https://qiita.com/sho_U/items/85

元記事を表示

OTHERカテゴリの最新記事