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

Rails関連のことを調べてみた2022年11月05日
目次

Guardの自動テストがRunningのまま動かない【Windows・Railsチュートリアル3章】

Cloud9使わずローカル環境で実施していたせいか、チュートリアルに記載の通りに行ってもGuardがうまく動かなかった。
解決策をメモしておく。

# 概要
下記リンク、「3.6.2 Guardによるテストの自動化」に記載されているGuardの初期化、Guardfileの編集を行ったものの、自動テストが完了しなかった。
https://railstutorial.jp/chapters/static_pages?version=6.0#sec-guard

こんな感じで `Running: ~` のあと `[1] guard(main)>` と出たまま動かない。
“`
00:52:47 – INFO – Running: test/controllers/static_pages_controller_test.rb
[1] guard(main)>
“`
待っていれば結果が出てくるのかな?と思ったが、いつまで経っても何も起こらなかった。

念のため `spring stop` コマンドも実行したが、
“`
Spring is not running
“`
と言われるだけで、再

元記事を表示

Railsでバージョン指定してのプロジェクト作成に失敗した時の対処法

# 課題

Rails 6.1.4.4でプロジェクト作成しようと

“`
rails _6.1.4.4_ new project_name
“`

を走らせるが以下のようなエラーが出力される。

“`
`find_spec_for_exe’: can’t find gem bundler (>= 6.1.4.4) with executable bundle (Gem::GemNotFoundException)
“`

# 仮説

以前はこれでプロジェクトを作成できていたのですが、以前沼に嵌った時にRailsのバージョンを消去した記憶がうっすらあったのでその時に6.1.4.4を削除していたかもしれない。

# 解決方法

– Rails 6.1.4.4を再度インストール

“`
gem i -v 6.1.4.4 rails
“`

で解決しました。

以下の記事が参考になりました。

https://qiita.com/tanakayo/items/7b85261924eca1a5a3d6

# 結論

必要なバージョンがインストールされていなかっただけでした。

なかな

元記事を表示

エラーメッセージについて

## 初めに
エラーメッセージの実装の仕方について簡単に記録のために書いておこうと思います。

## viewに記述

“`app/views/users/_errors.html.erb
<% if @user.errors.any? %>
<%= @user.errors.count %>件のエラーが発生しました

    <% @user.errors.full_messages.each do |message| %>

  • <%= message %>
  • <% end %>

<% end %>
“`

今回はuesrのeditに部分テンプレートで表示させたいのでこのように記述します。
<%= @user.errors.count %>件のエラーが発生しましたの部分で例えば3件記述の忘れがあれば3件のエラーが発生しましたとviewに表示されるようになります。

## 実際にeditに記述
“`app/views/users/edit.html.erb

ユーザー情報編集

<%= render 'users/err

元記事を表示

railsを5000ポートで起動してブラウザで7000ポートでアクセスできるようにする

# 目的
dockerを使っていて、ポートの理解の理解が足りておらず接続エラーになったのでメモ。

Docker Documentation: https://docs.docker.com/compose/compose-file/compose-file-v3/#ports
をみていて、hostのポートとコンテナのポートについて理解したことを書いた。

# docker-compose

ポートマッピングするにはdocker-composeに以下のように書く。

“`docker-compose
web:
ports:
– “3000:3000”
“`
いくつか書き方があるが、上記の書き方はDocker Documentationの

>Specify both ports (HOST:CONTAINER)

に従っている。ここの意味は「コンテナはポート番号3000で起動していて、ホストのサーバーはポート番号3000で起動していますよ」ということ。どちらも3000なのでわかりづらいが、

もし“`- “3001:3000″“`とした場合「コンテナはポート番号30

元記事を表示

【個人開発】300円以内でおやつを選ぶアプリを作りました【えんそくのおやつは300えんまで!】

# はじめに
はじめまして。
山田貴俊と申します。
先日「えんそくのおやつは300えんまで!」というアプリケーションをリリースしました。
内容は単純、300円以内でおやつを選ぶアプリです。



```

↓HTMLにべた書きすべき「ルート3」はMathJaxではこのように記述するので・・・

```html
3
```
↓これをこんなふうにHTMLにべた書きすると・・・
```ruby:quiz.html.erb

元記事を表示

AWS(S3)に画像をアップロードする

# はじめに
AWS(S3)に画像データを保存する必要性や手順をまとめたいと思います。
現状、herokuを用いてアプリのアップロードを行なっていますが、アップロードされた画像はアプリケーションのディレクトリに保存されていました。
しかし、ユーザーがアップロードした画像データは、アプリがデプロイまたは再起動(24時間に1回自動で行われる)される度に、消えてしまう仕様になっています。
そこで、ストレージサービス(画像等の膨大になるであろうデータを別途保管できる場所、サービスのこと)を利用することで、画像を長期的に保存することができるようになります。
ストレージサービスには様々な種類がありますが、今回はAWSが提供しているS3というサービスを使用します。

## S3(Amazon Simple Storage Service)とは
S3とは、AWSが提供するサービスの一つです。
(インターネット上にデータを保存する箱を借りられるサービスであるとイメージをすると良い。)
S3を利用することで、画像を保存したり、保存してある画像を取得したりすることができます。
S3に保存されたデータは実在の

元記事を表示

【Rails,Rspec】deviseによる認証機構のテストを書こうと思う。

# rspecの設定
deviseによる認証機構について、とりあえず手始めに、model specを書いていこうと思う。
まずRSpecを導入するために以下の通りgemをinstallする。(今回、開発環境にはdockerを使用している)
```ruby:Gemfile
gem 'rspec-rails'
gem "factory_bot_rails"
```
```:terminal
$ docker-compose exec app bundle install
```

```:terminal
$ docker-compose exec app bundle exec rails g rspec:install
```

# rails_helper.rb の追記
```ruby:spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'

元記事を表示

VSCode使っている時にActiveSupport::MessageEncryptor::InvalidMessageが出たら最初に疑うこと

## 結論
各.encファイル内でvscodeによる自動改行が入っており、その改行のせいでうまく動いていない可能性があるのでVSCodeの設定を見直す

## 起こったこと
リモートリポジトリからpullした後にrailsコマンドを使用すると

```ターミナル
ActiveSupport::MessageEncryptor::InvalidMessage
```
のエラーが出力されるようになりました。

## 調べたこと
まずこのエラーは
```ターミナル
ActiveSupport::MessageEncryptor::InvalidMessage
```
本来セットになっているはずの暗号化されているファイル(hoge.yml.enc)とそれに対応するキー(hoge.key)が一致していないのが原因
扉の鍵穴と鍵が一致していないのが原因である。

詳しくは↓↓
https://hirocorpblog.com/rails-credentials-master/

## 原因
今回起きたことは
vscodeの設定で自動で改行が入り、その改行のせいでファイルとキーが一致しなくなて

元記事を表示

【Ruby ブロック引数】メソッド.(&block)の引数の「&」ってなに?

# はじめに
```
def block_execute(&block) # ← ここの引数の「&」の意味がわからない
puts "block.call"
end

block_execute do
puts "blockを実行"
end
```
def block_execute(&block)
これを見て、(&block)ってどんな引数だよ!!

と思ったので調べました。

# 結論
(&block)の「&」がついた引数は、ブロック引数と呼ばれるものです。

# 解説
ブロック引数の前にブロックとは何か?

### ブロックとは?
メソッド実行時に、そのメソッドの引数として渡せる「処理のかたまり」のこと。
今回で言うとここ↓
```
block_execute do
puts "blockを実行"
end

または、
block_execute { puts "blockを実行" }
```

ブロックは
* do ~ end で囲まれた処理のかたまり
* {} で書くことも可能
* メソッドに渡すためだけに存在する

### ブロック引数とは?
ブロックを受け取る専

元記事を表示

kaminariを使ったページネーションの作り方

## 初めに
Gemfileに下記のkaminariを追加してあげます。
追加したらbundle installを忘れないようにしましょう。

```
gem 'kaminari','~> 1.2.1'
```
```
$ bundle install
```
bundle installをしたら次にkaminariの設定ファイルを作成する為に下記のコマンドをターミナルに打ち込みます。
```
$ rails g kaminari:config
```
最後に、kaminariが利用するテンプレートを作成してあげます。
```
$ rails g kaminari:views default
```
これでひとまず準備は完了です。

## 次にControllerに記述
例としてindexで記述しています。
```app/controllers/books_controller.rb
def index
@books = Book.page(params[:page]).per(9)
end
```
上記のようにpage(params[:page]).per(9)を付け足してあ

元記事を表示

【備忘録】【Rails】initializeメソッドの使い方

自分用のメモです。

# initializeメソッドとは(一言で)

- コンストラクタのこと。

# コンストラクタとは
- オブジェクトを生成した際に1度だけ実行される機能を指す名称。
- なお、オブジェクトが生成された際にのみ実行されることから、そのオブジェクト内で共通に使えるインスタンス変数の初期化などに使われる。
- ただしクラスを定義した際、コンストラクタを必ず作る必要はない。
- コンストラクタが定義されていなくてもオブジェクトを生成できる。
- また、Rubyではオブジェクトを生成するnewメソッドの引数を利用して、コンストラクタによる変数の初期化も可能。

# initializeメソッドの特徴

- initializeメソッドを定義しておくと、インスタンス生成時に必ず実行したい処理をメソッドを呼び出すことなく実行することができる。
- 例えば次の例では、initializeメソッドの中でインスタンス変数の初期化を行っている。

```ruby:
class Car
def initialize()
@name = "未定義"
end
end

c

元記事を表示

[Rails] action_argsでparamsを操る

# はじめに
[action_args](https://github.com/asakusarb/action_args)がparamsを扱う上で流行っているらしい。
さっそく使ってみる。

## 確認環境
Ruby 3.1.2
Rails 6.1.7

## 導入
```
# Gemfileに以下を追加
gem 'action_args'

# インストール
$ bundle install
```

# 使い方
showアクションとcreateアクションを例にとってご紹介します。
## showアクション
### 通常のparamsの場合
```ruby
class UsersController < ApplicationController def show @user = User.find(params[:id]) end end ``` そうです。`params[:id]`によってuserのidを取得します。 ### action_argsの場合 ```ruby class UsersController < ApplicationController

元記事を表示

【備忘録】【Rails】クラスメソッドとインスタンスメソッドの違い

クラスメソッドとインスタンスメソッドの違いについて、曖昧な理解だったため、今回改めて勉強しました。

# クラスメソッドの特徴

- クラス内で def self.メソッド名 〜 end で定義する
- クラスから直接データを呼び出すことができる
- あるモデルクラス全体に対し、情報を変更したり、参照したりするメソッドを作成するときに使うと便利
- 例えば「User」クラスを作成した場合を例にするなら、ユーザー一覧の表示や、ユーザー全体で共有して使うステータスを更新するメソッドを作成するときに使うと良い。

```ruby:def self.method_name での書き方
class Hoge
def self.hoge
puts "hoge"
end
end
Hoge.hoge # => hoge

# selfはHogeでもOK
```

```ruby:class << self 内でクラスメソッドを定義する書き方 class Hoge class << self def hoge puts "hoge" end end

元記事を表示

【Ruby】論理演算子(&&、||)の短絡評価を本質から理解する

# 1. はじめに

プログラムのソースコードで、しばしば以下のように`&&`で連結された処理を目にします。
```rb
user && user.authenticate(params[:session][:password])
```

この処理を読み解くと、「`user`が存在する時のみ、`user`の`authenticate`メソッドを実行する」と捉えられます。
これと同様に、`&&`と`||`は次のような使われ方をすることがあります。

```rb
条件式1 && 条件式2 #=> 条件式1がtrueの時だけ、条件式2を実行する
条件式1 || 条件式2 #=> 条件式1がfalseの時だけ、条件式2を実行する
```

では、なぜこのような挙動をするのか、原理を説明することはできるでしょうか?
「短絡評価」という名前や、コードの実行結果だけを暗記していて、原理はよくわからない、なんてことはありませんか?

実際、[Rubyの公式ドキュメントの論理演算子の項目](https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator

元記事を表示

【備忘録】【Rails】new + save と create の違い

どちらもレコードをつくるときのメソッドですが、何が違うのだろうと疑問に思ったので調べました。

# new + save を使うべき場合

### ①コントローラー内で、条件分岐させたいとき

例えばArticleモデルでバリデーションの設定をしていて、
保存時にバリデーションを適用させたいときにはif文等で条件分岐の記述をしますが、
その場合は以下のようにnew + save メソッドを使います。
理由:createメソッドでは、たとえ保存に失敗してもオブジェクトを返すためif文がtrueとなり成功時の処理を行ってしまうからです。

```ruby:
def create
@article = Article.new(article_params)
if @article.save
redirect_to("該当パス")
else
flash.now[:alert] = '文字を入力してください。'
render :index
end
end
```

### ②view側で使いたいとき

例えば Book モデルを

元記事を表示

ActiveStrageとは

Activestrageとは

Webアプリを作成していると、必ずと言っていいほど必要な画像の取り扱い。
Activestrageとは単純に言ってしまえば画像を取り扱うためのものです。
ほぼ毎回使うと言っても過言ではないので、忘れないようにまとめてみました。

Activestrageを導入しよう

画像を投稿できるようにするには、ActiveStorageが必要です。
なぜなら画像はカラムとして保存することができないため、別の手段を使って保存する必要があり、
その役割を担ってくれるのがこのActiveStorageなのです。
では、まずはインストールから始めましょう。

```
$ rails active_storage:install
```
インストールが終わるとdb/migrate内にActiveStorageのマイグレーションファイルが追加されます。
マイグレーションファイルということは...
そう、毎回おなじみのこちらのコマンドが必要です。
```
$ rails db:migrate
```
ちなみにActiveStorageは3つの

元記事を表示

Bundle installでmysql2がインストールできない

### Bundle installでmysql2がインストールできない

```
$ bundle install

(省略)

An error occurred while installing mysql2(0.5.3), and Bundle cannot continue.
Make sure that `gem intall mysql2 -v '0.5.3' --source 'https://rubygems.org/'`

In Gemfile:
mysql2
```

ログに吐かれたエラー文を確認

```
directory not found for option '-L/usr/local/opt/openssl/lib'
```

lsでディレクトリの確認
```
$ ls /usr/local/opt/openssl/lib
```
ディレクトリが存在しないことがわかった。

brew install openssl で opensslのパスを確認

```
==> openssl@3:stable 3.0.7(bottled)[keg-only]
Cr

元記事を表示

Active Recordのjoinsメソッドで複数テーブルを結合する

## これは何?

[Railsガイド](https://railsguides.jp/)の[Active Record クエリインターフェイス / 13.1.3 複数の関連付けを結合する](https://railsguides.jp/active_record_querying.html#%E8%A4%87%E6%95%B0%E3%81%AE%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91%E3%82%92%E7%B5%90%E5%90%88%E3%81%99%E3%82%8B)を読んでいて、`joinsメソッド`で`配列とハッシュをどのように使えばいいか深く知りたくなった`ので、いくつかのテーブル構成で実際に試し、結果をまとめた記事です。

## 対象バージョン

- ruby: `2.7.6`
- rails: `7.0.3.1`

## joinsメソッド内のルール

①複数のテーブルを結合する場合は、配列`[]`にする
②親テーブルに対して複数のテーブルを結合する場合は、配列`[]`を省略できる
③ネストして結合する場合は、ハッシュ`{}`にする

元記事を表示

form_withで送信ボタンを押しても動かないとき(同期通信)

備忘録。
form_withで送信ボタンを作成したとき、ページの更新を行なうとテーブルに情報が残るし、けど更新しないとエラーもでないのに固まったままだった。
```ruby

<% if user_signed_in? %>
<%= form_with model: [@item, @comment],local: true, id: "comment-form" do |f| %>
<%= f.text_area :text , class: "comment-text"%>
<%= f.submit "コメントをする", class: "comment-submit" %>
<% end %>
<% end %>

<コメント一覧>

<% @item.comments.each do |comment| %>

元記事を表示

OTHERカテゴリの最新記事