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

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

Railsで画像アップロードのテスト

carrierwaveを使った画像投稿のテストをする方法を学んだので、アウトプットします。
なお、テストを行うにあたり、RSpecというRailsのテストコードを書くために用いられるGemを導入しています。

## 動作環境
・Mac OS Big Sur 11.2
・Ruby 2.6.5
・Rails 6.0.0

## carrierwaveとは
carrierwaveとは、ファイルのアップロード機能を簡単に追加する事が出来るRubyのgemです。
アップロードしたファイルの保存先はデフォルトでpublic/uploadsに設定されており、Amazon S3など外部のストレージにも設定することができるそうです。
carrierwaveのインストールとその使い方については以下の記事を参考にしました。
https://qiita.com/ttaka66/items/264dcb85e41f9135685c

## FactoryBotの記述
デストで使用するインスタンスの情報を予め設定することができる、FactoryBotというgemを使い、事前に用意した画像をセットする形でテストの

元記事を表示

after_commitでDBの保存前後を比較判定する

# 何を書いているか?
DBの保存前と保存後の判定の仕方に1日詰まってしまい、せっかくなので備忘録として書いてます。

# どういう状況で詰まったか
after_commitスコープ内で、DBの保存前と保存後で比較し、保存・更新・削除されていれば、trueを返す処理をしたかったのですが、この「after_commit後の判定」というところでひっかかりました。しかも子モデルのテーブルだったのでなおさら…?

# 親モデルと子モデルの関係

“`ruby

# User.rb(親モデル)
class User < ApplicationRecord has_many :posts end # Post.rb(子モデル) class Post < ApplicationRecord belongs_to :user end ``` # DBにガッツリ保存された後に判定する もうどうしようもないと挫けそうでしたが(笑)なんとか方法があったので書きます。 保存する前であれば、さまざまメソッドはあります。 attr_was(現在は非推奨のようですが…)したり、changesやp

元記事を表示

本番環境でデータを削除、気をつけたいこと5選

# はじめに
本番環境のデータ削除は通常の開発プロセスとは似ているようで非なる作業です。
最初から別物として捉えて作業を始める必要があります。
この記事では、本番環境のデータ削除をするときに気をつけたいこと5つを紹介していきます。

# 1. 工数を過小評価しない
データ削除を行う場合、調査なしで正確な見積もりをすることはほぼ不可能です。
どんなにかんたんに思えても、作業を完了するために少なくとも2週間はかかると考えたほうが無難です。
なぜなら、次の項で述べるような質問に答えるための調査をする必要がありますし、コレでいけると思ったコードではパフォーマンスが出ず、書き直す必要がある。といった事態も起こりうるからです。
チームとしてある程度時間がかかるものという共通認識を持つことが大切です。

# 2. 事前調査をする
作業に取り掛かる前に、以下の質問に全て答えるための調査をしましょう。
すべての質問に答えることができたら、コーディングに取り掛かりましょう。

* 削除することになるレコード数はどのくらいか?
* どうやって対象のデータが削除されたこと、対象外のデータが削除されていないこ

元記事を表示

【RSpec】let にパラメータを渡したい

## はじめに

letにパラメータ(引数)を渡す方法です。
通常であればヘルパーメソッドで定義したり変数の部分をletで置いたりするなどと思いますが、選択肢の一つになれば幸いです。

## やりかた

lambdaで渡す(Procでも可)。

“`
# 定義の仕方
let(メソッド名) do
->(引数) { 処理 }
end

# 呼び出しかた
メソッド名.call(引数)
“`

例題

“`
# 定義
let(:say_something) do
->(sth) { p sth }
end

# 呼び出し
before do
say_something.call(‘hogehoge’)
say_something.call(‘piyo’)
end
“`

## おわりに

意外と知らなかったところだったので共有でした。

元記事を表示

Ruby on Railsにてコントローラー名を変更したとき

今回はRails初心者のためコントローラー名を変更した場合の手順を忘れたときようの備忘録として残したいと思います。

##コントローラー名の変更

まずrailsにおいてコントローラー名は複数形で設定とのことなので複数形にて命名する

例 articlesなど

以上を踏まえて、コントローラー名を変更していく

今回はHOMEという名前からarticlesに変更する

1.routes.rbにて名称変更

“`root to: ‘home#index’“`になっている状態からの変更

“`
routes.rbにて

Rails.application.routes.draw do

root to: ‘articles#index’
#homeの部分をarticlesに変更

end
“`

2.コントローラーファイルの名前を変更

アプリ内のappフォルダ内のコントローラーファイルを格納しているフォルダにある該当ファイルの名前を変更する
 
home_controller.rbからarticles_controller.rbへ変更

3.ファイル内のコントローラー名も変更す

元記事を表示

ruby-jmeterを使ってRailsアプリの負荷試験を継続的に行えるよう準備する

私はパフォーマンスチューニングが得意なこともあり、負荷試験を行う場面がそこそこあります。負荷試験ツールにはいろいろなものがありますが、古くからあり情報も多い[JMeter](https://jmeter.apache.org/)を使うケースは今でもそれなりに多いと思います。JMeterはGUIで設定ができて手軽なのですが、複雑なシナリオをGUIでポチポチ作るのは面倒です。シナリオをXML形式で出力することもできますが、XMLは読み書きしづらいですし、[JMeterのGUIでシナリオを実行してはいけない](https://jmeter.apache.org/usermanual/get-started.html#load_test_running)とのことです。それなら最初からわざわざGUIを起動したくないですよね。

そこで、RubyのDSLでJMeterのシナリオを記述できる__ruby-jmeter__を使って、Ralisアプリの負荷試験を継続的に行う環境を作っていきます。

https://github.com/flood-io/ruby-jmeter

# JMeterをインス

元記事を表示

Rails コンソールでDBのデータ確認

_今回は、railsコンソールでDBのデータを取得し確認する方法を学んだので記載致します!_
_まぁ、モデルにデータを突っ込んだ後にデバックして確認出来るので、かなりためにならない記事なるかもしれませんがご勘弁してください(T . T)_
#モデルのプロパティとDBのデータ内容
今回使用するモデルとデータは下記になります。

“`user.rb
class User < ApplicationRecord has_many :comment end #Userクラスのプロパティ t.string :user_name t.integer :age ``` ```comment.rb class Comment < ApplicationRecord belongs_to :user #Commentクラスのプロパティ t.string :text ``` __usersテーブル__ | user_name | age | |:-:|:-:| | 山田 | 18 | | 鈴木 | 20 | | 田中 | 21 | __commentsテーブル__

元記事を表示

Railsの【flash】を自分なりに噛み砕いた(3部作その3)

`flash`を理解する過程で、`params`や`session`についても理解できたのでまとめ
長くなりそうだったので、`1:params`、`2:session`、`3:flash`の3回に分けた

####【3部作リンク】
[1:params](https://qiita.com/masahiroDIARY/items/68c5294c8160ef6499c5)
[2:session](https://qiita.com/masahiroDIARY/items/4b442b149d0dc9a42eb0)
3:flash(ここ)

####【ページ内リンク】
[0.環境](#0環境)
[1.利用方法](#1利用方法)
[2.結論](#2結論)

#0.環境
・AWS
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#1.利用方法
###順序①:Controller指定
“`rb:examples_controller.rb
その1:flash = {notice: “noooo”

元記事を表示

Railsで複数のパラメーター(params)を追加するには?

リンク先の同一のページで表示内容をリンク元ごとに変えたい時

“`
<%= link_to "カレンダーで投稿をみる","/posts/#{current_user.id}/index?start_date=#{Date.today.strftime("%Y-%m-%d")}&post_index=0"%>
“`

上記では、params[:start_date]とparams[:post_index]でそれぞれDate.today.strftime(“%Y-%m-%d”)と”0″という値を受け取れる!

元々のURLの後に”?”で”パラメータ名=値”、複数ならば、その後に”&”と”パラメータ名=値”を続ければよし!

元記事を表示

【提案】tsvファイルのバリデーション やり方

## やったこと
json-schemaにバリデーションを任せることにしました。
https://github.com/ruby-json-schema/json-schema

(今回tsvファイルですが、csvファイルでも考え方は同じでできるはずです。)

## 前提(例)
### 要件
スプレッドシートで管理しているタスクをtsvで流し込みたい。
日本語テンプレートとフランス語テンプレートがあるから、どちらにも対応して欲しい。

### Taskモデル
“`ruby
class Task
enum priority: [:high, :middle, :low]

# …
end
“`
### tasksのスキーマ
“`ruby
create_table “tasks”, force: :cascade do |t|
t.date “deadline”, null: false
t.string “content”, null: false
t.integer “priority”, null: false
t.datetim

元記事を表示

RailsアプリにStripeを用いたサブスクリプション決済を導入する(詳しく解説)

#概要
僕がサブスクリプション決済を導入する際に参考にしたこちらの記事をもう少し詳しくしたような記事です。
https://qiita.com/tady/items/7617e62b2a5402ebd0fb
#事前準備
deviseというgemを使ったりして、Userモデルは作成しておいてください。僕はRails turorial第6版の完成品を使いました。

#注意
・この記事で扱うプランは一つです。複数のプランに関しては取り扱っておりません。
・無料プランすら扱っていません
#では始めましょう
まずこちらでstripeのアカウント登録を済ませてください。
https://dashboard.stripe.com/register

次にこちらでapi_keyをコピーできるようにしておいてください。
https://dashboard.stripe.com/account/apikeys

Railsアプリで
`EDITOR=”vi” rails credentials:edit`(local環境の場合はrails→bin/railsと打ち込む)
と打ち込み、
app/config/

元記事を表示

[Rails] Bootstrapを使ってHerokuにDeployするとBootstrapが反映されない

#参照
https://qiita.com/1024xx4/items/56172d140d7208230e32

#起こっていること
Rails6でHerokuにデプロイしたところBootStrapが効かなかったのですが解決できたのでメモとして残しておきます。ちなみに開発環境では最初から正常に動いていました。

#環境
Ruby 2.6.6
Rails 6.0.3

#手順
##1.RailsにBootstrap/jQueryを追加する
bootstrapやjqueryを追加するために下記のコマンドを入れます

“`
yarn add jquery bootstrap popper.js
“`

##2.`app/javascript`に`stylesheets/application.scss` を追加

“`:app/javascript/stylesheets/application.scss
@import ‘~bootstrap/scss/bootstrap’;
“`

##3.`app/javascript/packs/application.js`に以下を追加

元記事を表示

【発展】お気に入りに登録を非同期にしよう!

前回の記事の発展的な内容にになります。

https://qiita.com/mitaninjin/items/3a8b364c7cd13b961d83

上記のお気に入り機能が実装されている前提で話を進めていきます。

#####完成イメージ
![62d5738ed5b4bfc18a736c19712cff74.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140333/ac0245a6-9371-abd9-54ac-01475db71d27.gif)

##ビューファイルの編集
link_toメソッドに**remote: true**を追加します。

“`erb:app/views/recipes/show.html.erb
#中略
<% if current_user != @recipe.user %>

<% if @recipe.liked_by(current_user).blank? %>
<%= link_t

元記事を表示

【Rails】assert_matchの使い方

assert_match

Railsテストで使うメソッドで、第一引数の正規表現の値と第二引数の値がマッチすれば成功になるメソッドです。

第三引数にメッセージを設定すると、失敗時のメッセージを指定できます。(指定は任意です)

また、HTMLを評価する際に、assert_selectではタグを指定する必要がありますが、assert_matchではタグを指定する必要がありません。

““ruby:assert_match
#基本構文
assert_match(正規表現, 文字列 [, メッセージ])

#HTMLを評価するときの使い方(Railsチュートリアル第13章より)
assert_match @user.microposts.count.to_s, response.body

“`

参考

Rails ドキュメント
https://railsdoc.com/test

Ruby STUDIO Railsのテスト
http://ruby.studio-kingdom.com/rails/guides/testing#2

元記事を表示

RailsチュートリアルでRailsを実装できなかった原因

Railsチュートリアルをやっていくと1.3.2のrails severのところで詰まりました。
bundle installを実行して
development.rbに
# Cloud9 への接続を許可する
config.hosts.clear
を追加して

$ cd ~/environment/hello_app/
$ rails server

を実行してブラウザを開いたところ
![スクリーンショット 2021-03-16 18.42.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902438/1e7c74a3-e616-98f4-d99b-8a1e48a6d9aa.png)

この表示が出て困り果てました。

この動画を参考にしてやってみたところ簡単にRailsを実装できました。
動画ではバージョンの問題だと言っていますが一番は
$ rails server
を実行したときに
Control+C

元記事を表示

Ruby on Rails deviseのインストール

ログインに使うgem「devise」をインストールする。
一. Gemfileに以下を追記

“`
gem ‘devise’
“`

二. インストール

“`
bundle install
“`

三. 設定ファイルを生成

“`
rails g devise:install
“`

四. 認証用ファイルの生成(Userの名称は任意で、生成したいmodel名で作成)

“`
rails generate devise User
“`

とりあえずインストールはしたものの、ここから拡張していくのが難しい。

元記事を表示

《Ruby on Rails》超簡単にいいね機能を実装する方法を発見!!

#はじめに
いいね機能を色々調べてみましたが、
簡単な機能の割に物凄くややこしく複雑なコードと量で非常に効率が悪いようやきがしていて、もっとシンプルで簡単な方法を探してました。
おそらくこのやり方が1番シンプルなやり方だと思い、共有したく投稿しました。
参考になれば幸いです!!

##環境
Ruby 2.5.1
Rails 5.2.4.5
MySQL
Cloud9

##前提
投稿をpostで定義済。
deviseインストール済。

##目的
Twitterの様に全ての投稿に対しいいね機能を付けたい!

##①モデルの生成
“`
$rails g model like user_id:integer post_id:integer
“`
↑モデル名はlikeでカラムをuser_idとpost_idで作成。

“`
rails db:migrate
“`
↑データベースへ反映。

##②アソシエーションを定義

“`user.rb
has_many :likes
“`
↑userテーブルとlikeテーブルとは1対多の関係なのでhas_manyでアソシエーションを定義。

`

元記事を表示

【Rails6】Reactとaxiosを用いて非同期でdeviseの新規登録を実装する

Railsのみのアプリでの新規登録はやったことはあるものの、非同期で新規登録するやり方を知らなかったのでやってみることにした。
主にフロントエンドの話をする。

## axiosの導入

“`
npm install axios –save
“`

## axiosのインポート

“`jsx
//axiosの読み込み
import axios from ‘axios’;
“`

## 新規登録のフォーム作成

“`jsx
function UserFrom(props) {
// Header.jsxで定義したstateのcontentによって新規登録とログインのフォームを分ける
// 実際の送信処理はフロント実装のブランチで行う
if (props.content === ‘SignUp’) {
return (


元記事を表示

【Rails】activerecord::recordinvalid:エラーの解決法【CSV】

#はじめに
現場で使える Ruby on Rails 5速習実践ガイド
「Chapter 7 機能を追加してみよう」の「7-6-2CSVデータを入力(インポート)する」で若干詰まったのでメモ。
#環境
Ruby 2.6.6
Rails 6.1.3
#エラー出現
models、controllers、views、routesに参考書通り記載し、
現れたインポートボタンにmac付属のテキストエディットでcsvファイルを作成しアップロード!
すると、、、
「activerecord::recordinvalid:バリデーションに失敗しました: 名称を入力してください:」と出現。
書いたコードを見返してもタイポ等は見つからず、、、
エラー画面にはtask.save!の所にマーカーが引かれていたので、モデルを確認することにした。
#app/models/task.rb
まず処理のロジックを確認する。

““ruby:task.rb
def self.import(file) #–1)
CSV.foreach(file.path, headers: true) do |row| #

元記事を表示

Railsの【session】を自分なりに噛み砕いた(3部作その2)

`flash`を理解する過程で、`params`や`session`についても理解できたのでまとめ
長くなりそうだったので、`1:params`、`2:session`、`3:flash`の3回に分けた

####【3部作リンク】
[1:params](https://qiita.com/masahiroDIARY/items/68c5294c8160ef6499c5)
2:session(ここ)
[3:flash](https://qiita.com/masahiroDIARY/items/d2d81f55fd695eb9d44e)

####【ページ内リンク】
[0.環境](#0環境)
[1.前提知識](#1前提知識)
[2.利用例](#2利用例)
[3.結論](#3結論)

#0.環境
・AWS
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#1.前提知識
`session`も値ではなく**ハッシュ**!!!!!(←超重要)

[ページ内リンクへ戻る](#ページ内リンク)

#2

元記事を表示

OTHERカテゴリの最新記事