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

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

本番環境だけNoMethodError undefined method

![スクリーンショット 2021-10-05 9.48.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653881/dfc014d0-de0f-1b61-bcc4-2663a71abf39.png)

このように本番環境だけ、undefined methodエラーがでた。

trades_countカラムをローカルで追加したので、

本番環境のターミナルで

“`
rails db:migrate RAILS_ENV=production
“`

を実行すれば本番環境でカラムが追加されるので、
エラーが解決できる。

元記事を表示

[Rails] Rspec ポートフォリオに実装したsystem spec

# はじめに
ポートフォリオに実際に実装したsystem specの部分です。
テストコードについては勉強したけどテストコードを実際に書く時にどんなことをテストすればいいか分からないと思ったのでそういった人の参考になれば嬉しいです。
テストしたのは投稿機能部分です。

## イベント投稿

“`ruby:spec/system/event_spec.rb
require ‘rails_helper’

RSpec.describe “Event”,js: true ,type: :system do
let(:user) { create(:user) }

describe “イベントの表示” do
let!(:events) { create_list(:event, 3) }
subject { visit root_path }
it “イベント一覧を表示できる” do
subject
events.each do |event|
expect(page).to have_css(“.card-titl

元記事を表示

【Rails】Slim-railsのメモ

##概要
Ruby製のHTMLテンプレートエンジンであるslimを使えるようにするGem。Slimはコーディングを速くするだけでなく、コードを読み込むスピードも速くなる。

##手順

###インストール

Gemfile

“`
gem ‘slim-rails’
“`

bundle installh後、viewファイルの拡張子を「html.slim」に変更。

###実装例

html.erbの時

“`
<% @posts.each do |a| %>

<%= a.title %>

<% end %>
“`

slim-rails適用後

“`
– @posts.each do |a|
p = a.title
“`

###ポイント

– <% %> というruby記法の使用宣言が、「-」となっていること
– <%= %> というruby記法の使用宣言 + 出力が、「=」となっていること
– 閉じタグが不要なこと(段落によって閉じタグを判断する)
– `

~~

`という記法が、「p」となっていること(HTMLタグの<> や、閉じタ

元記事を表示

【Rails】Redisのメモ

##Redisとは
・KVSを保存する、NoSQLの一つ
・インメモリ方式
・セッションなど有効期限のあるデータを扱う場合
 や、ランキングデータなど重たいSQLを走らせた
 い場合に用いる

##実装手順
####Redisのインストール
“`
$ brew install redis
“`

####Redisサーバーの起動

“`
$ redis-server
“`

####Redisへの接続

“`
$ redis-cli
“`

###使用方法

SET を使って Key と Value を設定しデータを保存する。
GET で Key を指定して Value を取得する。
quit で redis-cli を終了。

“`
redis> SET mykey “A”
OK
redis> GET mykey
“A”
redis> quit
“`

###Railsへの導入

“`
gem ‘redis-rails’
“`
後にbundle install

config/enviroments/◯◯.rbの使用したい環境

“`
config.cache

元記事を表示

【個人開発】チームで同時に操作できる、手動統合テスト管理ツール「Itamaster」をリリースしました!

# サイトの概要
![itamaster_twitter_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1869061/1b4fc1dd-875a-bd11-267c-23ed25ac1fa4.png)

APP URL
https://itamaster.work

Itamasterは、Web上で統合テストを設計、管理し、直感的な操作で実行が可能なサービスです。

テストには前提条件、手順、期待する結果を複数登録でき、実行ログは全てサーバーに保存されます。
チームには他のユーザーを招待し、複数人で同時にテストの管理、実行が可能です。

また、システムはテスト結果を複数の選択肢からテンプレートを選択し、Excelへの出力が可能です。
(テスト結果一覧表、テストサマリーレポートの出力が現在可能です。詳細やイメージは後述「プロジェクト」章にて解説します。)
Excelを編集する際のCPUへの負荷と、作業時のストレスを無くすことが出来ます。

言語切り替え機能が実装されています。
英語と日本語によ

元記事を表示

売り切れ商品をsold out表示にしよう!

#soldout表示にする大まかな流れ
一度購入された商品に対して、その後soldout表示させる方法をご紹介します。
下記のようにsoldout画像を表示できるようにします。

![8A3C76B5-1EF6-4317-820A-FF53EC6B8201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1547587/cbcc12e4-5379-ec72-ce21-cd425a3d0d68.png)

大まかな流れとしては、

①商品の状態判定に使用するカラムを設定する。
②購入確定ボタンを押して購入データを保存する際に、is_activeの値をtrueからfalseに更新する。
③viewページでif文の条件分岐により商品画像をsoldout表示にする。

##①商品の状態判定に使用するカラムを設定する。
商品テーブルに(カラム名:is_active, データ型:boolean, デフォルト:true, notnull制約)を設定する。
*この際の、デフォルトのtrueは販売中,falseは売り切れと

元記事を表示

rails tutorialで学習したことのアウトプット及び見返し

目的:rails tutorialで学習したことのアウトプット及び見返し

学習している章:2章(2.2.2)

1.MVCモデルの挙動
MVCとはModel-View-Controller = モデル-ビュー-コントローラ
URLをクリックしてどのような挙動でブラウザに返ってくるのかを学んだ。(文で書くと長くなるので下記のような図を演習で書けるようになった)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1617255/7c36e6bb-c5b9-d41c-aa5d-a76a1eb0d539.png)

2.ユーザーからリクエストされたURLを、Usersリソースで使うコントローラのアクションに割り当てるためのコード
resources :users

3.rails generate scaffold User name:string email:string
rails標準であるチート機能(scaffold)
name:stringとemail:stringオプションを追加するこ

元記事を表示

railsチュートリアル第七章 Gravatar画像とサイドバー

###Gravatar画像とサイドバー
前節で基本的なユーザーページの定義は終わりましたので、今度は各ユーザーのプロフィール写真のあたりをもう少し肉付けし、サイドバーも作り始めましょう。
ここでは“`Gravatar(Globally Recognized AVATAR)“`をプロフィールに導入してみましょう。
Gravatarは無料のサービスで、“`プロフィール写真をアップロード“`して、“`指定したメールアドレス“`と関連付けることができます。
その結果、 Gravatarはプロフィール写真をアップロードするときの面倒な作業や写真が欠ける“`トラブル“`、また、“`画像の置き場所“`の悩みを解決します。
というのも、ユーザーのメールアドレスを組み込んだGravatar専用の画像パスを構成するだけで、対応するGravatarの画像が自動的に表示されるからです。

####ユーザー表示ビューに名前とGravatarを表示する
app/views/users/show.html.erb

“`html
<% provide(:title, @user.name) %

元記事を表示

railsチュートリアル第七章 debuggerメソッド

###debuggerメソッド
アプリケーションの振る舞いを理解するために“`debug“`メソッドが役に立つことを学びました。
しかし、もっと““直接的にデバッグする方法“`もあります。
それが“`byebug gem“`による“`debugger“`メソッドです。
debuggerメソッドを実際にアプリケーションに差し込んで確かめてみましょう。

####debuggerをUsersコントローラに差し込む
app/controllers/users_controller.rb

“`rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) # データベースからユーザー情報を取り出す debugger # rails sにデバックが表示される end def new end end ``` debuggerメソッドを差し込んだら、ブラウザから /users/1 にアクセスし、Railsサ

元記事を表示

if文による条件分岐(Ruby)

**基礎編**

まずは、基本的な書き方から紹介します。

“`
if <条件式>  then
 <文>
end
“`
<条件式>が真(falseとnil以外)なのか偽(falseとnil)なのかを判断して、真のときに、<文>を実行します。
実際に書いていきます。

“`
number = 5
if number == 5
puts (‘5です’)
end
“`
説明すると、

1. numberに5を代入します
1. もし、numberが5だったら、’5です’と表示してください

こんな感じになります。このコードを実行すると、真と判断され、’5です’と表示されます。
また、<条件式>が偽と判断されると、<文>は実行されません。

**応用編**

さらに細かく条件を指定したいときは、ifの中にelsifやelseを加えることで指定することが出来ます。

“`
if <条件式1> then
<条件式1>の結果が真のときに実行したい処理
elsif <条件式2> then
<条件式1>の結果が偽で、かつ<条件式2>の結果が真のときに実行したい処理
els

元記事を表示

Rails+ReactでAjaxいいねボタンを作る方法

#はじめに
Ruby on Rails と React を用いてSPAのポートフォリオを作る中でAjaxでいいねボタンを作る必要があったのでその方法をシェアしたいと思います. 細かいcontrollerやmodelの作成については書いておりませんのでご了承ください.
なお, いいねボタンのアイコンにはFont Awesomeを使用します.

“`
【動作環境】
Rails 6.1.4
react-rails の gemを使用
“`

#1. Font Awesome からハートマークをインストール

“`sh
$ yarn add @fortawesome/free-solid-svg-icons
$ yarn add @fortawesome/free-regular-svg-icons
“`
↓公式ページの通りインストール

https://fontawesome.com/v5.15/how-to-use/on-the-web/using-with/react

#2. フロント側の実装

“`react
import React, { useState } fr

元記事を表示

rails serverを実施したときに、pumaについて、mach-o, but wrong architecture

#書いた理由
備忘メモ
何度も同じことが起こるので

#起こったこと

rails tutorialを進める過程で
`rails s`
を実行したとき、コケる

“`
/Users/username/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require’: dlopen(/Users/username/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/puma-3.9.1/lib/puma/puma_http11.bundle, 9): no suitable image found. Did find: (LoadError)
/Users/username/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/puma-3.9.1/lib/puma/puma_http11.bundle: mach-o, but wr

元記事を表示

[Rails] Rspec ポートフォリオに実装したrequest spec

# はじめに
ポートフォリオに実際に実装したrequest specの部分です。
テストコードについては勉強したけどテストコードを実際に書く時にどんなことをテストすればいいか分からないと思ったのでそういった人の参考になれば嬉しいです。
テストしたのはCRUD機能部分です。

## index

### Controller

`with_attached_eyecatch`はactive storageでN+1が起きないするためのメソッドです。

“`ruby:app/controllers/event_controller.rb
def index
@events = Event.with_attached_eyecatch.latest
end
“`

### request spec
`subject`を使うことでリクエストを共通化しています。

“`ruby:spec/requests/events_spec.rb
describe ‘GET #index’ do
subject { get(events_path) }
context ‘イベントが存在する場

元記事を表示

【Rails】stimulus.js × view-component やってみた

# 概要
**stimulus.js × view-component**の導入を学んだので、
記録のために残しておきます。

今回のゴールは **stimulus.js × view-component** で
以下の入力欄に文字を入力し、Greetを押すと、横に「Hello, 〇〇!」と表示されたら成功です。
![スクリーンショット 2021-10-04 15.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1129869/06b5033c-45fd-f361-6f91-15f40d603d7d.png)
      ↓↓↓
![スクリーンショット 2021-10-04 15.55.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1129869/a636df7a-5d38-7d30-f41d-9fd259413a08.png)

# 参考資料
[stimulus公式ドキュメント](https://gi

元記事を表示

rails5, rails6以降のchartkicksの導入方法

railsの情報って5が圧倒的に多いですけど、6って意外と情報少ないですよね…
はい。その罠にかかって時間を費やしてしまったわけです。
そこで、railsに見やすいグラフを導入してくれるchartkicksのバージョン別導入方法を記述していきます!
結果から言ってしまうと公式読めば済むことでしたが…。

https://github.com/ankane/chartkick

# 共通手順
gemfileに記述して

“`:gemfile
gem “chartkick”
“`

ターミナルで以下を実行
`bundle install`

gemなのでこの流れは必須ですね。

# rails5のchartkicksの導入手順

headタグに以下を記述

“`html.erb:view/layout/application.html.erb
<%= javascript_include_tag "//www.google.com/jsapi", "chartkick" %>
“`

そして、app/assets/javascripts/application.jsに以下を

元記事を表示

【Rspec】before / let / let!

##環境
Ruby 3.0.2
Rails 6.1.4.1

##before
describeやcontextの内部に書いたテストを実行するたびに毎回実行されるため、使う必要のないデータを作成してテストを遅くする原因になることがある

“`spec/models/article_spec.rb
describe “文字列に一致する記事を検索する” do
before do
@article1 = create(:article, title: “first”)
@article2 = create(:article, title: “second”)
@article3 = create(:article, title: “first article”)
end

context “一致する記事が見つかるとき” do
it “検索文字列に一致する記事を返すこと” do
expect(Article.search(title: “first”)).to include(@article1, @ar

元記事を表示

[Rails] Rspec ポートフォリオに実装したmodel spec

# はじめに
ポートフォリオに実際に実装したmodel specの部分です。
テストコードについては勉強したけどテストコードを実際に書く時にどんなことをテストすればいいか分からないと思ったのでそういった人の参考になれば嬉しいです。
テストしたのはログイン、CRUD、いいね機能部分です。

## User

validationのformatで指定している正規表現は、メールアドレスの形になっているのかを表しています。
Railsチュートリアルに載ってたのをまんまコピペしてきただけですが‥

“`ruby:app/models/user.rb
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i.freeze

validates :email, presence: true, uniqueness: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }
“`

“`ruby:spec/factories/user.rb
FactoryB

元記事を表示

[Rails] Rspec基礎 system spec

Rspecについて勉強した時のメモです。

# System Specとは
プログラムによってブラウザを操作し想定通りに動作するのかを確認するテストのことです。

system specの具体的な流れは、
①画面が正しく表示されているかを確認したい
②画面の表示に必要なデータの作成
③プログラムによってブラウザが想定通りに表示されているかを確認する

# 準備
system specはブラウザを操作してテストするのでchromdriverというソフトフェアをインストールする必要があります。

※Google Chromeを元々使用しているのが前提です。

“`ruby:ターミナル
$ brew cask install chromedriver
“`

“`ruby:ターミナル
chromedriver was successfully installed!
“`
と出たらインストール完了です。

# 実装
前提として前回同様`User`が`title`と`content`カラムを持つ`Article`モデルを投稿できるシンプルなCRUDアプリを想定しています。

元記事を表示

hidden_fieldを使いたくなかったから、試行錯誤した話

# 寝て起きたら閃いた
撲滅したかった部分のコード

“`rb
<%= f.hidden_field :list_id, value: @list.id %>
“`

外部キーをフォームに持たせるために使っていたがデベロッパーツールで改ざんされるのを防ぐため撲滅することにした。
ああでもないこうでもない、色々と試行錯誤したがストロングパラメーターのあるprivateメソッド内で書くことが一番だと考え、ストロングパラメーターに含めたら、最終的に以下のコードになった。

“`rb
private
def card_params
params.require(:card).permit(:title, :memo).merge(list: find_list)
end

def find_list
@list = List.find(params[:list_id])
end
“`

全体のコード
view

“`rb
<%= form_with model: @card, url: list_card_index_path,

元記事を表示

Railsのhas_manyのデフォルトの挙動

↓以下のコードを例にします。

“`ruby
class User < ApplicationRecord has_many :microposts, dependent: :destroy end ``` **「has_many :microposts, dependent: :destroy」**とすると**Userモデル**と**Micropostモデル**を1対多の関係に紐づけてくれますが、特に**「Micropost」**という記述がなくても動作します。これはデフォルトの挙動のおかげです。 デフォルトでは、「:microposts」の部分を**「{モデル名}s」**と推測します。 つまり**「:microposts」⇨ 「{Micropost}s」**としMicropostモデルと紐づければいよいとrailsが理解してくれます。 紐づけるキー、つまりforeign_keyに関しても**「{モデル名}_id」**がforeign_keyであると推測してくれます。 今回だと、**「user_id」**がforeign_keyであると推測します。 ```ruby cla

元記事を表示

OTHERカテゴリの最新記事