Rails関連のことを調べてみた2023年02月14日

Rails関連のことを調べてみた2023年02月14日

【Rails】Capistranoによる自動デプロイ

Capistranoによる自動デプロイ設定で出た、Gemエラーの解消法を備忘として。

“`ruby:コマンド実行
% bundle exec cap production deploy
“`

## エラー内容
“`ruby:ターミナル実行結果
01:01 deploy:assets:precompile
01 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
01 bundler: failed to load command: rake (/var/www/furima-38877/shared/bundle/ruby/2.6.0/bin/rake)
01 Bundler::GemNotFound: Could not find date-3.3.3 in any of the sources
01 /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-2.1

元記事を表示

railsで指定したバージョンがインストールできない場合

# 概要
railsの学び直しをしようと、新しい環境を作った際に、指定したバージョンをインストールしたはずなのにできていなかった時のまとめです。

# 環境
AWS
cloud9
mac
Linux

# 起こっていたこと
“`rails:ターミナル
ec2-user:~/environment/アプリ名 (main) $ gem install rails -v 7.0.4
Successfully installed rails-7.0.4
1 gem installed
ec2-user:~/environment/アプリ名 (main) $ rails -v
Rails 6.1.7.2
“`
あれ?rails7.0.4を指定したし、installできたってあるのにversionが違う…

# 解決法
Gemfile.lockを見ましょう。

“`Gemfile.lock
rails (6.1.7.2)
actioncable (= 6.1.7.2)
actionmailbox (= 6.1.7.2)
actionmailer

元記事を表示

Ruby 計算プログラムの作成

# 計算プログラムの作成

二桁以上の整数を入力すると、十の位と一の位の数字の足し算、十の位と一の位の数字の掛け算をそれぞれ行います。
最後に2つの結果を足し合わせて出力するプログラムを作成します。

“`ruby
def addition(a, b)
a + b
end

def multiplication(a,b)
a * b
end

def slice_num(num)
tens_place = (num / 10) % 10
ones_place = num % 10
return tens_place, ones_place
end

puts “二桁の整数を入力してください”
input = gets.to_i

X, Y = slice_num(input)
add_result = addition(X, Y)
multiple_result = multiplication(X, Y)

puts “足し算結果と掛け算結果の合計値は#{add_result + multiple_result}です”
“`

## 解説
このプログラムをター

元記事を表示

text_fieldに値を表示し、編集できないようにする

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# readonlyオプション

予約確認画面などで、インスタンス変数にセットされた値を表示するのみで、ユーザーに編集されたくない場合などは`text_field`のオプションで、`readonly`を指定する。

### 基本形

“`ruby
<%= f.text_field :name, readonly: true %>
“`

### 記述例

“`ruby
<%= form_with model: @reservation do |f| %>

<%= f.label :starg, '開始日' %> <%= f.date_field :start, readonly: true %>
<%= f.l

ransackのselectボックスでenumのi18nを使用する

# はじめに
ransackのselectボックスでenumのi18nを使用する時に記載方法に迷ったのでメモを残します

### 理解していないとハマること
・enumを使用すると、実際にDBに保存されているのは対応づけられたinteger(数値)であること
・ransackはその数値に基づいて検索をかけていること
・selectボックスを検索条件に設定した時のHTML構造を理解すること
(valueの値がenumで設定した名前(文字列)になっていること)
“`“`
### ポイント
“`
Admin.statuses_i18n.invert.map { |key, value| [key, Admin.statuses[value]] }
“`
key・・・enumで設定した名前(文字列)
value・・・enumで対応づけられたinteger(数値)

### 間違えていたこと
ransa

Docker composeを使ったWebアプリ開発環境の構築

## Rails開発用のDockerfileを作成する
![dsfklj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2565038/8ea6e623-09fa-76a5-6ce8-0d5d0a9b2c4d.png)

~~~Dockerfile:Dockerfile
FROM ruby:2.5
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn
WORKDIR /product-register
COPY Gemfile Gemfile.lock /product-register/
RUN bundle install
~~~

~~~Rails:Gemfile
source ‘https://rubygems.org’
gem ‘rails’, ‘~>5.2’
~~~

### Dockerfi

Ruby if, else問題

# if, else問題

Aさんは普段土日が休みの仕事に就いており、休みの日は遅くまで寝ていたいと考えています。
そこで、Aさんのために「その日が遅くまで寝ていられるかどうか」を判断するプログラムを作成します。

第一引数の値では「平日かどうか」、第二引数の値では「休暇かどうか」をtrueまたはfalseを用いて以下のように表します。
– 条件1:第一引数がtrue(平日である)または、第二引数がtrue(休暇である)の場合はtrueと出力する
– 条件2:第一引数がfalse(平日でない)または、第二引数がtrue(休暇である)の場合はtrueと出力する
– 条件3:第一引数がtrue(平日である)または、第二引数がfalse(休暇でない)の場合はfalseと出力する
– 条件4:第一引数がfalse(平日でない)または、第二引数がfalse(休暇でない)の場合はtrueと出力する

“`:雛形
def sleep_in(is_weekday, is_vacation)
# ここに条件式を実装する
end

# 呼び出し例
sleep_in(false

Rubyのデバッガ byebugの全コマンド一覧表

こんにちは。toC向けプロダクトのフロントからバックエンド領域の開発を担当している[hideki_okawa](https://twitter.com/hideki_okawa)です。
最近では、バックエンドでRuby on Railsを用いて開発することが多いです。

## なにこれ?

今回は、Rubyのデバッガである [byebug](https://github.com/deivid-rodriguez/byebug) の全コマンド一覧表です。

全コマンドを知るモチベーションとして、デバッガで出来ることを知っておくことは今後の開発を効率よく進めるために重要だと考えたからです。

「道具の使い方を学ぼう」的なことは、かの有名な [達人プログラマー](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E7%AC%AC2%E7%89%88-%E7%86%9F%E9%81%94%E3%81%AB%E5%90%91%E3%81%91%E3%

2022年最も見逃せない有用なGemまとめTOP58 (日本語訳)

以下の記事の日本語訳です

58 RoR Gems: Pin To Plane For Developing RoR Application

# 2022年最高のgems
Rubygems.orgの公式レポートでは、2021年に最もダウンロードされたgemsについて言及します。
これにより、ruby on railsの開発者が何を使っているのか、どのrails gemが最も便利なのかわかります。

### Rubyの便利なGemsとその使い勝手
gemを以下のようにいくつかに分類しました。
– Activecord
– View Helper
– Authentication & Authorization
– Debugging
– Testing
– Admin View
– File Upload
– Deployment
– Code Quality
– Payment
など

## Activecord
#### 1. Activecord Import
ActiveRecord-importを使用すると、大量のレコードを簡単に挿入することができます。ActiveRe

RailsとReactの疎通を確認したい

# はじめに
前回の続きになります。今回はreactとrailsの疎通を行っていきます。

https://qiita.com/does_not_exist/items/19c35639e466844e8b0e

# ファイル準備
## react

“`react/src/…/test.tsx

import axios, { AxiosResponse } from “axios”;
import { apiURL } from “../../globalEnv”;

type Data = {
data: string;
};

const testMethod = () => {
axios
.get(`${apiURL}/api/v1/test`, {
params: {
name: “test”
}
})
.then((res: AxiosResponse) => {
if (res.status === 200) {

【devise_token_auth】rack (2.2.4) lib/rack/utils.rb:464:in `[]=’の解決方法

症状

device_token_authを使って認証機能を実装しようとしたところ、以下が表示されました。

翻訳すると、「nil:NilClass の未定義メソッド」でした。

“`terminal:error
NoMethodError (undefined method `downcase’ for nil:NilClass):
rack (2.2.4) lib/rack/utils.rb:464:in `[]=’
rack (2.2.4) lib/rack/utils.rb:432:in `block in initialize’
rack (2.2.4) lib/rack/utils.rb:432:in `each’
rack (2.2.4) lib/rack/utils.rb:432:in `initialize’
rack (2.2.4) lib/rack/utils.rb:425:in `new’
rack (2.2.4) lib/rack/utils.rb:425:in `[]’
rack (2.2.4) lib/rack/etag.rb:29:

これから

改めて知識をアウトプットさせていきます。よろしくお願いします。

hidden_fieldでパラメータを送信する

# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# ユーザーからは見えないようにパラメータを送信する

ユーザーが入力フォームから入力したデータ以外にも、パラメータをコントローラへ送信したい場合には`hidden_field`を使用する。

例えば、`Room`詳細ページで予約処理を実行する場合、ユーザーが入力する予約情報以外に`room_id`などを送信したい場合などがある。

ユーザーに見えなくても良い情報は見えない方が望ましい、かつ、万が一編集されるとシステムエラーなどが起こる可能性もあるため、`hidden_field`を使用してユーザーには非表示の状態でアプリケーション側で値を設定して送信するとよい。

### 基本形(第一引数にパラメータ名(シンボル)、第二引数部分にvalueとして値を受け渡す)

“`ruby
<%= f.hidden_field :パラメータ名, :value => 値

【議事録】AWS(EC2)へデプロイしたアプリをSSL化し、セキュリティを担保する手順(Let’s Encryptを使用)(ALBは使わない)

# はじめに
– 本記事は、議事録としてまとめたものになります。
– 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
– また記載内容はすべて、正しい内容が記載されているとは限りません。
– 誤った内容を見つけた場合は、ご指摘をお願いいたします。

# この記事は誰向けの記事か?
– AWS(EC2)で稼働させているアプリをSSL化したい人
– TechCampのポートフォリオ作成で、SSL化したいが困っている人
– 費用を抑えつつ、SSL化したい人
– AWS(ALB)を用いず、SSL化したい人(ALBは稼働に相当費用がかかるため、Let’s Encryptを用いたい人)

# 背景
– 自分のアプリ(ポートフォリオ)を、SSL化したいと思ったことがきっかけで実装することになった。
– TechCampへ参加し、オリジナルアプリを、Herokuにデプロイしていたが、その有料化に伴い、RenderやAWSを使うことになった。
– AWS(EC2)にアプリをデプロイしたが、通信プロトコルがHTTPSではなく、HTTPがデフォルトだった。
– プロトコルがHTTPだった場

【rubocop-airbnb】指摘箇所について

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# rubocop-airbnbによるスキャンを実行する

### 実行コマンド

“`bash
bundle exec rubocop –require rubocop-airbnb
“`

### 実行結果

“`ruby
Inspecting 15 files
…………..C

Offenses:

spec/spec_helper.rb:49:1: C: Style/BlockComments: Do not use block comments.
=begin …
^^^^^^

15 files inspected, 1 offense detected, 1 offense auto-correctable
“`

### 実行結果の確認

下記の通り、15ファイルをスキャンして、1つの修正箇所を指摘している。

【Rails】本番環境構築で Missing service adapter for “GCS” と怒られる

# 【Rails】本番環境構築で Missing service adapter for “GCS” と怒られる

## 状況

### my 環境
・Rails 7
・active_storage 採用
・本番だけ GCS 使おうとしている
・render.com へデプロイしてる

###

production.rb で下記の指定をしていて、
“`

config.active_storage.service = :google

“`

storage.yml で下記の指定をしている。
“`
google:
service: GCS
project: <%= ENV['GCS_PROJECT_NAME'] %>
credentials: <%= ENV['GCS_KEYFILE'] %>
bucket: <%= ENV['GCS_BUCKET'] %>
“`

`service: GCS` で GCS を service adapter として使おうとしているけど、それが存在しない

### エラーログ

“`
Feb

【Rails】Deviseをカスタマイズして使いたい!!(ルーティング編)

# どうした?

前回の記事では、Deviseを導入しUserモデルを作成しました。

https://qiita.com/ysk91_engineer/items/108e8d451aa33333e248

今回の記事では、

* ルーティングを設定し、URLとパスをカスタマイズ
* コントローラファイルを作成し、アクションを設定
* ビューファイルを用意し、ページにアクセスする

を目標に進めていきます。

# 今回目指すもの

前回作成したUserモデルに対して、以下の処理をするためのルーティングを作成していきます。

**registrations_controller**

| HTTPリクエスト | パス | URL | アクション | 処理内容 |
|:-: |:-: |:-: |:-: |:-:|
| get | new_user | sign_up | new

【Rails】Deviseをカスタマイズして使いたい!! (導入〜モデル編)

# どうした?

Railsでアプリを作る際、ユーザー認証に便利なのがDevise gemです。
ただこのDevise、何でもかんでも言いなりに使用するとブラックボックス化してしまいます。
メソッドのようなおいしいところだけ使わさせて頂き、基本的な設計は自分の手でおこなうためにチャレンジしてみました。

:::note
Deviseを使う前に、Railsチュートリアル等で勉強して自分でユーザー認証できるようにしましょう。
Deviseも[そう言ってます](https://github.com/heartcombo/devise#starting-with-rails)。
:::

# 今回目指すもの
今回目指すのは、以下のようなUserモデルです。

| カラム | 物理名 | 型 | 条件 |
|:-: |:-: |:-: |:-:|
| id | id | integer | |
| 名前 | name | string | 入力: 必須, 最大文字数: 50 |
| Eメール |

Ruby include?メソッドを使ってプログラムを作成する

# include?メソッド
include?メソッドについては以前の投稿で書きました。

https://qiita.com/ta–i/items/3a7004d890bccf7ad2c1

今回include?メソッドをもう一度調べているときに、大文字小文字を区別せずに検索する方法があることを知りました。

例:大文字小文字を区別せずに検索する
“`ruby
string = “Hello World”
puts string.downcase.include?(“hello world”)
“`
“`ruby
true
# ターミナル出力
“`
downcaseメソッドは、大文字を小文字に変換します。
今回は小文字に変換して、(“hello world”)を検索したという流れです。

# include?メソッドを使って、特定の数字が含まれているかをチェックするプログラムを作成
下記条件です。
– 条件1:配列内に1,2,3が全て入っている場合は、「True」と出力すること
– 条件2:配列内に1,2,3の全てが入っていない場合は、「False」と出力すること

`

AbstractController::DoubleRenderError

# はじめに
フリマアプリを実装中のエラーです。
ログイン状態、ログアウト状態で遷移できるページを変更したい実装中に
`AbstractController::DoubleRenderError`のデバックを記載しています。
URLは直打ちで入力する事とします!

実装したいこと
* ログイン状態でも自身が出品していない編集ページへ遷移しようとするとトップページに遷移する。
* ログアウト状態で商品編集ページに遷移しようとするとログインページに遷移する。

以上の2点を実装しようとしています。

# エラーまでの経緯 ~コード紹介~

~~~ruby items_controller.rb
def edit
redirect_to new_user_session_path unless user_signed_in?
if current_user.id != @item.user_id
redirect_to root_path
end
end
~~~

以上の実装で
~~~
AbstractController::DoubleRenderErr