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

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

Ruby sliceメソッド

# sliceメソッド
配列や文字列から、指定した要素を取り出すことができるメソッドです。

“`ruby:例
# 配列を作成します
array = [0,1,2,3,4,5,6]

# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1 # 0番目から始まるため、1が取り出されました

# 配列番号-4から4つ分の要素をsliceします
ele2 = array.slice(-4,4)
puts ele2
#=> 3, 4, 5, 6

# 配列はもとのままです
puts array
#=> [0,1,2,3,4,5,6]
“`

# sliceメソッドを使って指定した文字列を取り出すプログラムを作成します

条件は以下です。
– 条件1:対象の文字列から末尾にある2文字を取得すること
– 条件2:取得した2文字を3回繰り返して出力すること

“`ruby:模範解答
def extra_end(str)
right2 = str.slice(- 2, 2)
puts right2 * 3
end

#

元記事を表示

【Ruby on Rails】valitationの冗長をなくす方法

# 前提条件
– Ruby 3.1.0
– Rails 7.0.4

# 背景
全てのカラムに対して同じバリテーションを設定すると、下記のように同じ記述が繰り返され冗長性がある状態である。
“` ruby:User.rb
class User < ActiveRecord::Base validates :name, presence: true #冗長性あり validates :email, presence: true #冗長性あり validates :age, presence: true #冗長性あり validates :password, presence: true #冗長性あり end ``` # やりたいこと バリテーションの冗長性をなくしたい。 # 方法 ### with_optionsブロックを使う 下記のようにwith_optionsブロックでpresenceをまとめることで、ブロック内のカラムすべてに適用されるようになる。 ``` ruby:User.rb class User < Active

元記事を表示

Gem fileにてGemを取り込む方法 Gemfile.lockの説明

使用しているVer ruby 2.6.5 Rails 6.0.6.1

○Gemとは?
誰かが作ったものを活用するために、Gemが存在します。
プログラマーでよく言われる言葉で、「車輪の再発明をしない」
この言葉の元Gemというものがありそういったもの総称をライブラリーとも言います。
ライブラリーは有名な言語であれば必ず存在します。

○早速Gemを取り込んでいきたいと思います

まずGem fileにてGemの名前を書き込みます。
 今回はfakerを取り入れます。
 

下記をGem fileに記入

gem ‘faker’
ターミナルにて、

$ bundle install

と実行。※$は記入しません。
以上でfakerのダウンロード完了です?

・READMEのドキュメントに使い方やインストールのやり方が記入されています。
https://github.com/faker-ruby/faker
もし、他にも取り入れたいgemがあれば、READMEを参考に使用するか
全て英語で分かりづらい時は、有名なgemであれば検索して日本語で出てくるかと思

元記事を表示

【Rails】Blocked host 解消法

## 状況

任意のホスト名を指定してアクセスしようとした際に次のようなエラーが発生しました。

“`
Blocked host: sample-host.com
To allow requests to sample-host.com, add the following to your environment configuration:
config.hosts << "sample-host.com" ``` ## 解消法 次のように`config/environments/development.rb`に追加しホストを許可することで解消します。 ```rb:development.rb Rails.application.configure do config.hosts << "sample-host.com" end ```

元記事を表示

【Ruby on Rails】ルーティングのネストで発生するActionController::UrlGenerationErrorの解消方法

# 前提条件
– Ruby 3.1.0
– Rails 7.0.4

# エラー事象
ルーティングのネストは正しく記述されているはずなのに、Prefix`new_user_food_path`が利用できない。ActionController::UrlGenerationErrorが発生する。
“` ruby:config/route.rb
resources :users do
resources :microposts
end
“`
“` user/show.html.erb

<%= link_to "新規投稿", new_user_micropost_path %>

“`
# 原因
### new_user_micropost_pathの引数にユーザ情報がなかった
`$ rails routes`でルーティングをよく見ると、
`new_user_micoropost`のURI Patternは`/users/:user_id/~`、
`user`のURI Patternは`/users/:_id/~`

元記事を表示

これでrailsのサーバーが立ち上がらない

# 概要
rails sしてサーバーは立ち上がったが、このようなエラーがターミナルで出る。
解決はすぐだったので書きます。

# 環境
rails 7.0.4.2
ruby 3.1.2
AWS
cloud9
linux
mac

# 解決法
もう一発で書きます。
gemに
“`rails:Gemfile
gem ‘sqlite3’
“`

これを足してbundle install。これで解決。
意外とgemfileは見落としてしまうので、しっかり確認することは初歩的ですが大事だと思いました。

元記事を表示

rails sできない!

# 概要
rails sでサーバーを起動しようとしたのですが、できませんでした。
解決までの道のりをメモ的に記します。初心者向けですので、詳しい方で「もっと良い解決法がある」「その方法はダメだ」ということがあればご指摘ください。

# 起こったこと
“`rails:ターミナル
ec2-user:~/environment/アプリ名 (main) $ rails s
=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bootsnap-1.12.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:15:in `require’: cannot load such file — listen (LoadError)
~
~
~
`

元記事を表示

bundle installできない!

# 概要
railsチュートリアルで学ぼうとして、環境を構築している最中に起こったことです。
解決までの道のりを自分なりにまとめていきます。

# 環境
mac
AWS
cloud9
linux

# 起こったこと

“`rails:ターミナル
ec2-user:~/environment/アプリ名 (main) $ bundle _2.3.14_ install
Fetching gem metadata from https://rubygems.org/……….
Resolving dependencies…
Bundler could not find compatible versions for gem “activesupport”:
In snapshot (Gemfile.lock):
activesupport (= 6.1.7.2)

In Gemfile:
j

元記事を表示

Railsからdynamodb-localにレコードを作成したい

# はじめに
railsからdynamodb-localにレコードを作成しようとしたところ、以下のエラーが発生しました。

“`
NameError (undefined local variable or method `options’ for #)
“`

これはmodelでApplicationRecordを継承していたことが原因でした。

classに記載している「< ApplicationRecord」を削除して再度レコードを作成すると成功しました。 以下が正しいコードです。 ```backend/app/models/hoge class Hoge include Dynamoid::Document table name: :hoges, key: :id, capacity_mode: :on_demand field :title, :string 略 end ``` ``` > Hoge.create(id: ‘1’, title: ‘test’)
“`

# おわりに

元記事を表示

【ChatGPT活用法】Railsで新規サービス立ち上げる際の活用術

# Railsでサービス立ち上げる際の相棒にChatGPT
ChatGPTがウェブサービスを開発する上で有用な点をまとめてみました。

全てにおいて共通する考え方ですが

> 1. あのGemを使って、こんなカラムを持ってるテーブルだから、こうしてああすれば、完成する
> 2. これ、汚いコードで本当はもっと綺麗に書けるよなー

という ”理想” を描く必要はあります

しかし、今までは Google検索 で知識を補完し、自分でその状態に持っていっていましたが
Google検索 より ChatGPT の方がより早く理想の状態に持っていけるというのが体感値です。

ChatGPTの回答がベストプラクティスかどうかを判断するのは個人の責任です
そのプロジェクト、クラス、メソッドにおいてそれが”良い”かどうかを判断する必要はありそうです。

## AIが作ったコードを本採用するの?
よければそのまま採用してます

しかし、AIが作ったコードを修正した結果、全く別の形になることもあると思います。
でも良いのです、 “同じコードを3回書かないと理想のコードにはならない” という名言もあるので

元記事を表示

【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/************/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}です”
“`

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

元記事を表示

【Ruby on Rails】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) {