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

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

RSpec+Capybara+selenium+chromedriverでのテスト

主にchromedriverの導入に手こずったので記録しておきます。

#Gemfileの設定#

“`ruby:Gemfile
group :test do
gem ‘rspec-rails’
gem ‘capybara’
gem ‘selenium-webdriver’
end
“`
#chromedriverの導入#

“`terminal
$ brew install chromedriver
“`

terminalにて ‘brew install chromedriver’を実行
注意点:(PCのrootディレクトリーで実行すること)
※which chromedriverにでinstall先が見れる

②最新版にアップデートする

“`terminal
$ brew update chromedriver
“`

#chromeをヘッドレスモードで起動するために#

“`ruby:spec/rails_helper.rb
RSpec.configure dp |config|
 #他の記述
config.before(:each)

元記事を表示

webpackを使って手動でコンパイルしたjsをrails6で読み込むことに成功

# 方針
railsでデフォルトで入っているgem webpackerを使わずにwebpackを使って手動でjsをコンパイルする。
entryファイル内でvue.jsを読み込み、componentを使ってアプリの見た目を作っていく。
webpackを使ってbuildされたjsをrailsアプリで読み込み、componentをアプリに読み込む。

# 現状の実装内容
画像の通りindex.html.erbにcomponentで定義したh1要素を表示させることに成功
![ChatVueApp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652172/bac35bb4-27d0-4f28-1dc5-d7ca5eff8ec2.png)

# 本日の実装の詳細

### ※最初にgitignoreが反映されていなかったので以下の手順にて修正

1.gitignoreを編集

2.以下のコマンドでcasheを削除

“`
git rm -r –cached . //ファイル全体キャッシュ削除
“`

3.

元記事を表示

[Rails] RSpec エラー expected `User.count` to have changed by 1, but was not given a block

はじめに

Rails のテストツール Rspec を使ってみました。
使用中に、expected `User.count` to have changed by 1, but was not given a block と言うエラーにハマったので備忘録として残します。

問題のソースコード

これがエラーの出るソースコードです。

エラーのでるソース

“`ruby
expect(
find(‘input[name=”commit”]’).click
).to change{User.count}.by(1)
“`

エラーの内容

エラー  expected `User.count` to have changed by 1, but was not given a block
翻訳  `User.count`が1変更されると予想されましたが、ブロックが与えられませんでした

change マッチャを使うときは、expectをブロックにしなきゃいけないよって事

元記事を表示

RailsにおけるURLの直打ちを阻止する方法

# きっかけ
viewファイルに条件分岐を作っていても、そもそもUrlから直打ちされてしまうとページに飛ばれてしまうことに気づいたため。

# 結論
任意のコントローラーにbefore_actionを使って、アクションを起こす前段階の条件分岐を作っておく。

# コード
“`ruby:items.controller.rb
class ItemsController < ApplicationController #before_actionを使って、コントーラーのアクションに飛ぶ前に条件分岐をかける before_action :correct_user, only: [:edit] before_action :item_find, only: [:show, :edit, :update, :destroy] def edit end private def item_params params.require(:item).permit(:title, :explain, :category_id, :condition_id,

元記事を表示

kaminariにもう少しだけ詳しくなってみた。kaminari_themesの使用、configファイルの生成

## 何をしたか
何度も使っているgemではあるのですが、故になかなかしっかりreadmeも読んだことのないgem。kaminariを[公式ドキュメント](https://github.com/kaminari/kaminari)も読みながら、もう少し丁寧に実装してみました。

具体的には、
– `config`ファイルの生成
– `kaminari_themes`の利用

をしました。kaminariの実装そのものには深く込み入っていません。

### 設定ファイル kaminari_config.rbの生成

kaminariの表示件数は、こんな感じでずっと描いていたのですが、

“`Ruby
@posts = Post.page(params[:page]).per(15)
“`

諸々のコードを見ていくうちに、設定ファイルがありそうということに気づき、調べてみました。すると、[公式のこちらの記載](https://github.com/kaminari/kaminari#configuring-kaminari)を見つけました。

“`Ruby:
rails g kami

元記事を表示

ポートフォリオのREADMEを書くときの工夫

#はじめに
 ポートフォリオ用にアプリケーションを作成し、READMEを記述したので、そのときに気をつけたことを紹介します。

##?アクセント程度に絵文字を使う
見出しの前に内容に合った絵文字を入れました。ただし、中には表示されない絵文字もあるので、その絵文字が思い通りに表示されているのか確認が必要です。

##画像やgifを入れて、実装されている機能を見せる
簡単にスクショ&gifを取れるアプリ
[Gyazo](https://gyazo.com/download?lang=ja)

ちなみに、マークダウン記法で画像を挿入するには、

“`markdown
![ここに文字](ここにURL)
“`
##本当に改行できてる?
箇条書きのリストであれば、勝手に改行されるが、自分が任意のところで改行したいときは、
単に、Enterを押しても改行されません。これは、マークダウン記法の仕様です。
改行をするには、改行したいところに半角スペースを2つつけることです。

元記事を表示

Ransackでor検索機能を作る。

## 使用環境
“`
rails 6.0.2
ubuntu (WSL)
“`

## 手順
### gemインストール
“`Gemfile
gem ‘ransack’
“`
`bundle`を忘れずに。

### 内容の検索
`post_controller`は既に作ってあるものとします。

“`posts_controller.rb
def index
unless params[:q].blank?
#入力された単語を空白で分割
split_keyword = params[:q][:content_cont].split(/\p{blank}/)
end
@q = Post.ransack(content_cont_any: split_keyword)
@posts = @q.result
end
“`
入力(検索ワード)があるか調べる。
ここがないとエラーになると思う。

“`.rb
unless params[:q].blnak?
“`

### 検索フォーム
“`posts/index.h

元記事を表示

【Rails】FontAwesomeを導入する方法

#はじめに
FontAwesomeをrailsで導入するってすごく簡単なのに、簡単すぎるせいか、やり方を記載しているものを見つけにくかったので、こちらに記載します。
私はgemをインストールしてみたり、yarn add〜してみたりして2時間ほど潰れました(笑)
※初学者による記載ですので、誤りがあればご指摘願います。

#導入方法
まずFontAwesomeのアカウントを作成します。
[Font Awesome](https://fontawesome.com/)

ログインして、下の写真にあるManage Kitをクリックします。

![スクリーンショット 2021-01-07 21.03.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771363/72bf052f-05f4-c29c-076e-6238b17d567f.png)

そうすると下の写真のページに行くので、黒く塗り潰してある部分(本来は英数文字が書かれています)をクリックします。
![スクリーンショット 2021-01-07 2

元記事を表示

rails error解消まとめ

▼問題点
railsにてコマンドrails console と打ったが下記errorがでる。

Usage:
rails new APP_PATH [options]

▼対処手順
①qiitaで調べる

②gitやbundleの再インストールが必要?
⇨解決できず

③カレントディレクトリがプロジェクトと紐づいてないのでは?
⇨解決

▼所感
どうやら、ターミナルを新しく立ち上げた際にカレントディレクトリが変更されていたようだ。

初歩的だが、同じ系統の過ちが多いので留意する。

元記事を表示

【Rails】ログイン結果をJSON形式で返す(初学者用)

## はじめに
API通信って最初何やってるのかよくわかりませんでした。
今回は、同じ悩みを持つ人が少しでもイメージが持てるように、
UIはつくらずに、実行後のレスポンス結果をJSONで返す実装を紹介します。
題材はRails初学者が恐らく最初に学んだであろうサインアップ、ログイン。

## コード
※ userテーブルのカラムはemail,password
※ アクセスURLはhttp://localhost:3000/api/v1/*** とします。localhost:3000のままでもok

“`ruby:routes.rb
Rails.application.routes.draw do
# namespaceで /api/v1/の階層をつくる
namespace :api, format: :json do
namespace :v1 do
post :sign_up, to: ‘users#sign_up’
post :login, to: ‘users#login’
end
end
end
“`

“`rub

元記事を表示

HerokuでPGBackupsを使う

# はじめに
Herokuでデータベースのバックアップを取るコマンド、PGBackupsを使ってみる。
使い方は公式サイトにそのままあるので、ご参考下さい。
https://devcenter.heroku.com/articles/heroku-postgres-backups

# 環境
Rails 5.2.4.2
Vagrant + Ubuntu 16.04.5 LTS

# やってみた事
Herokuにログインします。

“`
$heroku login –interactive
“`

バックアップ対象のアプリ名を確認します。

“`
$heroku apps
“`

アプリ名を指定して、手動でバックアップを取ります。

“`
$heroku pg:backups:capture –app アプリ名
“`

ステータスを表示して、バックアップが取れている事を確認する。手動で取ったバックアップの場合、ダンプファイルにはbで始まるIDが付番され、スケジューラから作成されたバックアップには、aで始まるIDが付番されるようです。タイムスタンプは9時間の時差で表示される

元記事を表示

[Rails][docker]Please run `yarn install –check-files`を解決する

### docker使用時に以下のエラーについてけっこーハマってしまったので備忘録です。

## 【環境】
・Ruby 2.7.1
・Rails 6.0.3.4
・Docker

## Dockerfile

“`Dockerfile
FROM ruby:2.7.1
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update -qq \
&& apt-get install -y nodejs yarn \
&& mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
CO

元記事を表示

[Rails] [親子関係] 親を削除した時、子にある外部キーをnilで登録したい

## 概要
以下の親子関係をreferenceでリレーション構築している際、
親モデルのデータ削除時に、子である商品データは削除せずに外部キーがnilで登録されるようにしたいがコンソールから親を削除した際にエラーが出て対処方法がわからず少し困った話です。
・親モデル:”カテゴリー”
・子モデル:”商品”

“`20201211121059_create_products.rb
t.references :category, null: false, foreign_key: true
“`

## 実践
以下の記事などを参考に実施した。
optional: trueを設定すれば、nilを許可する方法
https://techtechmedia.com/optional-true-rails/#optional_true
https://qiita.com/takuyanin/items/6f6be86d1265be21bf9e

こんな感じでhas_many, belongs_to にdependent, optionslのオプションを付けた。

“`catedory.rb

元記事を表示

[Rails]seed作成でコンパクトに書きたい(%w記法、each_with_index、番号指定パラメータ)

seed登録にて、rubyの記法など使ったものを色々まとめてみました。

## 基本
“`rb
User.create!(name: ‘田中’, email: ‘tanaka@test.com’)
User.create!(name: ‘鈴木’, email: ‘suzuki@test.com’)
“`

## 二次元配列
“`rb
array = [ [‘田中’, ‘tanaka@test.com’], [‘鈴木’, ‘suzuki@test.com’] ]
array.each do |first, second|
User.create!(name: first, email: second)
end
“`

## 二次元配列(コンパクトに)

“`rb
[
[‘田中’, ‘tanaka@test.com’], [‘鈴木’, ‘suzuki@test.com’]
].each do |first, second|
User.create!(name: first, email: second)
end
“`

## %w記法
“`rb
array = %

元記事を表示

[Devise]Deviseのroutingカスタマイズ方法ざっくりまとめた

開発案件でdeviseのルーティングをカスタマイズをする機会が多かったのでざっくりまとめてみました。

まずdevise導入時に以下コマンド入力してルーティング設定しますよね。

“` :ターミナル
rails g devise user
“`
すると、以下のように自動でルーティングが設定されます。
これだけでdeviseルーティングが賄えるわけですが、カスタマイズしたい場合それの記述方法があります。

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

“`
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:

元記事を表示

devise使わずユーザー編集・更新機能を実装する

#はじめに

今回はユーザーのマイページを実装してから、プロフィールを編集できるようにするための方法を解説します。

#前提条件

・deviseを導入済み
・deviseによるゆーざー新規登録/ログイン機能を実装済み

#開発環境

Ruby 2.6.5
Rails 6.0.0
MySQL 5.6.50

#手順

##1)ユーザー詳細(マイページの実装)

まずdeviseのものとは別に`usersコントローラー`を作成します。
ターミナルにて以下コマンドを実行します。

“`ruby:ターミナル
$ rails g controller users show
“`

コントローラーが作成できたら、以下のようにファイルを編集ます。

“`ruby:controllers/users_controller
class UsersController < ApplicationController before_action :set_user, only: [:show] def show; end private def set_user @us

元記事を表示

【Ruby on Rails】「||=」←この代入演算子の使い方まとめ

#代入演算子
`代入演算子`とは、変数に対して何か値を代入する為の演算子です。
以下記事にわかりやすく解説してあるので、わからない方は読んでみてください。

https://wa3.i-3-i.info/word18049.html

`代入演算子`には以下のようなさまざまな種類が存在します。

|記号|意味|
|:-:|:-:|
|=|代入|
|+=|加算して代入|
|-=|減算して代入|
|*=|乗算して代入|
|/=|除算して代入|
|%=|乗余して代入|
|**=|累乗して代入|
|.=|文字列として結合(追加)|

#「||=」(or equal)の代入演算子
代入演算子の中に、`「||=」`このような代入演算子も存在します。

「=」と「||」が合体した演算子です。

`「=」`は代入を意味します。上でも記載したが代入演算子の一種です。

“`terminal:
a = b
a に b を代入します。
“`

続いて、`「||」`はどちらかの条件が成立すれば、trueを返すという演算子です。(ORを意味します。)
これは、**論理演算子**と呼ばれています。

`

元記事を表示

deviseのlockableを使うときに意識しないといけないこと

## つまり

`config.unlock_strategy`を`:time`や`:none`にするときはよく考えて

## バージョン

* Rails 6.1.0
* devise 4.7.3

## lockableについて

deviseのlockableは、ログインに何回か失敗したらアカウントロックを行う、というもの。
注意すべきは、「ログインがロックされる」のではなく、「アカウントがロックされる」のだということ。
これは、アカウントロック中にアクセスしたログイン中セッションは、全て強制ログアウトされる動作になる。

これを利用して、次のようなイタズラをされると、結構困る。

1. ユーザAがdeviseを使ったwebサービスにログインしている
2. 他人がユーザAのメールアドレスでログインしようとするが連続で失敗して、ユーザAのアカウントロックされる
3. ユーザAがアカウントロック中にwebサービスにアクセスする
4. ログアウトされて、ユーザAはロック解除されるまでwebサービスが利用できなくなる

### 回避方法

同回避するか、3つほど考えた。

#### メー

元記事を表示

「bundle exec rubocop -a」を使って失敗したお話

■状況
staffマイグレーションの簡単な修正を行う
コンフリクトが起きる
ローカルのmainブランチを最新にする
git merge メインブランチを行い、コンフリクトを解消する
「bundle exec rubocop」でいくつかエラーが出たため、「bundle exec rubocop -a」を実行
「bundle exec rubocop」を行うが、以下のエラーだけ解消されない

“`:コンソール
# bundle exec rubocop

app/models/user.rb:47:3: C: Rails/UniqueValidationWithoutIndex: Uniqueness validation should be with a unique index.
validates :email, presence: true, length: { maximum: 70 }, …
“`

しかし、このファイルは今回自分は触っていないため、原因が分からず。

結果、以下の方法で検証・解決しました。

・念のためメインブランチをテスト実行→エラー0件
・そ

元記事を表示

フロントエンドの人が未経験からバックエンド開発をするために実践した学習方法と複数言語習得のススメ【Ruby on Rails】

## TL;DR

– [自作メモを作り、知識をアウトソーシングしよう!](https://qiita.com/sunnymerryAce/items/70f2807a7fa00e56b44a#%E8%87%AA%E4%BD%9C%E3%83%A1%E3%83%A2%E3%82%92%E4%BD%9C%E3%82%8A%E7%9F%A5%E8%AD%98%E3%82%92%E3%82%A2%E3%82%A6%E3%83%88%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%B3%E3%82%B0%E3%81%97%E3%82%88%E3%81%86)
– [複数言語を習得しよう!](https://qiita.com/sunnymerryAce/items/70f2807a7fa00e56b44a#%E8%A4%87%E6%95%B0%E8%A8%80%E8%AA%9E%E3%82%92%E7%BF%92%E5%BE%97%E3%81%97%E3%82%88%E3%81%86)

## はじめに

Livesense Advent Calendar 19日目を担当

元記事を表示

OTHERカテゴリの最新記事