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

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

【Ruby on Rails】RSpecの導入方法

# RSpecの導入方法

### Gemfileに追記

GemfileにRspec, Factorybot, Fakerを追加するための記述を追記。
この時、:test do ~ endの間に追記することに注意。

“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
#ここに以下3行を書き足す
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`

### ターミナル実行

ターミナルで以下を実行。
“`terminal:ターミナル
bundle install
rails g rspec:install
“`

以下の実行結果が表示される。
specフォ

元記事を表示

SNS兼小説サイト「Satoruya」におけるライブラリの選定方法。枯れた技術の水平思考の勧め

この記事ではSNS兼小説サイト「Satoruya」におけるライブラリの選定方法をご紹介します
まぁ、ぶっちゃければ横井軍平氏のやり方である「枯れた技術の水平思考」をそっくり真似ました。

# 1.「枯れた技術の水平思考」とは?横井軍平氏って誰?

ゲーム業界においてマリオの作者である宮本茂氏、スマブラの作者である桜井政博氏、任天堂の社長を務めていた故・岩田聡社長と並ぶ最大の偉人の一人(1997年に逝去)なのでウェブアプリ業界であっても知っている人は相当多いと思いますが、改めて解説します。

非常に簡潔に述べると「ウルトラハンド」という玩具を作って大ヒット商品にし、その後も「ラブテスター」「光線銃」など立て続けにヒット商品を連発、「ゲーム&ウォッチ」を作って任天堂を立て直し、ゲームボーイの開発などを行った人です。

おそらくこの人の存在を知ってゲーム業界を目指し、結果的にゲーム・非ゲームを問わずIT技術者になった人も多いのではないでしょうか?

それで、この人の思考法として「枯れた技術の水平思考」というのがあります。
これは「最新技術ではなく敢えて枯れて使いまわされたメリット・デメリット

元記事を表示

Railsのアクション内で実行される「redirect_to」にて、クエリストリングを渡す方法

## バージョン

– Rails 6.1.7
– ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]

## 状況

controller内の処理にて、リダイレクトするときにクエリストリングが渡したい。

“`ruby
class SessionController < ApplicationController def create # ... 処理 redirect_to xxx_url # ここでクエリパラメータを渡したい end end ``` ## 結論 上記のように`xxx_url`を使った場合、キーワード引数として値を渡してもうまく反映されない。 ```ruby class SessionController < ApplicationController def create # ... 処理 redirect_to xxx_url, hogehoge: "fugafuga" # もちろんこんな形でも無理 # redirec

元記事を表示

停止状態のSupabaseを再開する手順(と個人的な感想)

## はじめに
Herokuの無料プランが終了するので、ためしにRailsアプリからSupabaseのデータベース(PostgreSQL)に接続してみました。
そのときの話は以前こちらのブログに書いています。

https://blog.jnito.com/entry/2022/10/04/104100

ただし、無料版のSupabaseは1週間使用しないと自動停止します(paused状態になる)。

この記事では停止状態のSupabaseを再開する手順を説明します。

## 自動停止に至るまで
5日間アクセスがないとSupabaseから「もうすぐ自動停止するよ」という通知メールが届きます。

> Hi Junichi Ito,
>
> To save on cloud resources I just did a scan of all our projects and identified those which have been inactive for more than 5 days.
>
> Your project (プロジェクト名) was one of those

元記事を表示

[m1 mac]rbenvでRubyをインストールするとBUILD FAILEDが出た際の解決方法

# はじめに
rbenvで他のバージョンをインストールした時に、はまったので共有しようと思います。

# 経緯
rubyのバージョンを2.5.3で合わせる必要があり、rbenvでインストールすると下記のエラーが発生しました。

“`
rbenv install 2.5.3

Downloading ruby-2.5.3.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.bz2
Installing ruby-2.5.3…

WARNING: ruby-2.5.3 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

ruby-build: using readline from homebrew

BUILD FAILED (macOS 12.5.1 using ruby-build 20220910.1)
“`

# なぜ

元記事を表示

Rubyで設定ファイル読み込み

# はじめに
Rubyで設定ファイルの読み込み方法を調べたので、そのメモ書きになります。
Docker上でのRailsサーバーを使用しています。

# 設定ファイル用意
今回はtest.confファイルを以下内容で用意します。
“`
[api]
key = ABC
“`

# Gemfile
Gemfileに以下を追加します。
“`
group :development do
gem ‘inifile’ ★追加
“`

# イメージの再構築
“`
docker-compose build –no-cache
“`

# ソース
“`
require “inifile” ★追記

class Search < ApplicationRecord def self.searchApi() ini = IniFile.load("setting.conf") ★追記 searcher.key = ini["api"]["key"] ★追記 ``` # 起動 ``` docker-compose up -d ``` 以上で、設定ファイルが読み込めるよ

元記事を表示

Docker×Ruby on Rails環境でデバックを行う

# はじめに
Dockerを使ってRuby on Railsの環境構築をした際に、デバックの仕方に困ったので、そのメモ書きになります。
今回はpry-railsを使ってのデバックです。

# Gemfile
Gemfileに以下を追記します
“`
group :development, :test do
gem ‘pry-rails’ ★追加
end
“`
pry-railsがインストールされるようにします。

# docker-compose.yml

Gemfileに以下を追記します
“`
app:
tty: true ★追加
stdin_open: true ★追加
“`
これはdocker runコマンドの -it オプションと同じで、
dockerでの操作結果等がコンソールに出力されるようにする設定です。

# binding.pryの記述
デバックしたいRubyのソースに下記を追記してください。
“`
binding.pry
“`

# Dockerイメージを再構築
これまでの変更があるので、イメージを再構築します。
“`
docker-compo

元記事を表示

Ruby 麻雀 配牌のシャンテン数をカウントしたい②

まだ完成までは到達していませんが、まず一部の目処が立ったので、アウトプットとなります。
その点はご了承ください。

# 今回の進捗
前回作成した配牌の種類カウンターを用いて、面子の判定を行うコードを作成しました。
もう少し上手い書き方はいくらでもあるかと思いますが、なかなかRubyでコード公開している人いないので、誰か拾い上げてもらえればといった希望も持ってます・・・

# コード紹介

“`Ruby
j = 0
while j < 9 do if j <= 6 if mcntr[j] == 2 && (mcntr[j+1] <= 1 && mcntr[j+2] <= 1) jantocnt += 1 mcntr[j] -= 2 end if pcntr[j] == 2 && (pcntr[j+1] <= 1 && pcntr[j+2] <= 1) jantocnt += 1 pcntr[j] -= 2 end

元記事を表示

AWS EC2で立ち上げたRails(unicorn)サーバーのログ確認方法

## 前提条件
RailsアプリをEC2(unicorn)にデプロイして、サーバー起動済みの場合のログ確認方法

## 結論
該当アプリのlogディレクトリで以下のコマンドを実行すればOK
“`terminal:terminal(EC2インスタンス内)
$ tail -f production.log
“`

## 詳細
デプロイしたリポジトリで以下のコマンドを実行してください!
“`terminal:terminal(EC2インスタンス内)
$ ls
Gemfile Gemfile.lock README.md Rakefile app bin config config.ru csv db lib log public spec storage tmp vendor

$ cd log

$ ls
production.log unicorn.stderr.log unicorn.stdout.log

$ tail -f production.log
以下にサーバーのログが流れてくる
“`

## tailコマンドについて
ファイルの

元記事を表示

ActiveRecord_Relationクラス 配列のように扱える

## 配列のように表示された。
“`rb
irb(main):071:0> a = User.where(“name LIKE ?”, “t%”)
User Load (0.9ms) SELECT `users`.* FROM `users` WHERE (name LIKE ‘t%’)
=>
[# a
=>
[#

元記事を表示

Dockerを使ってRuby on Railsの環境構築をしてみた

# はじめに
DockerもRuby on Railsもどちらも扱ったことがなかったので、
まとめて学習できれば良いなと思ったのがきっかけです。
今回は簡単な画面表示までをやっていきます。
※Windows環境です

# 必要なファイルの用意
docker-sampleというディレクトリを作成し、この中で作業していきます。
まず、以下4つの空ファイルをディレクトリ直下に作成します。
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh

““
docker-sample/
   ├─ Dockerfile
   ├─ docker-compose.yml
   ├─ Gemfile
   ├─ Gemfile.lock
   └─ entrypoint.shDockerfile
““
各ファイルの中身はこの後設定していきます。

# Dockerfileの設定
DockerfileとはDockerイメージを作成するための設計書のようなものです。
今回は以下の内容で作成します。

““
FROM ru

元記事を表示

Insomniaの使い方

## この記事の目的
インターンでapi開発を行なっている際にInsomniaを使用した。使い方を忘れないようにメモを残しておく。
なんとなく理解している程度のため表現方法や理解がおかしいかもしれない。その際はコメント等で指摘してくれると助かります。

## Docker側の操作
“`bash:terminal
rails s -b 0.0.0.0
“`
IP`0.0.0.0`にバインドさせながらサーバーを起動させる。

## rails側のapi
### ソースコード
“`ruby:event_controller.rb
class Api::EventsController < ApplicationController def index #binding.pry events = Event.all render json: events end def create @event = Event.new(event_params.merge({ hashed_url: invent_hash })) #bindin

元記事を表示

モデルが保持している特定の値だけ保存したい

フォームオブジェクト(ActiveModelをincludeしている)が保持している特定の値だけ、DBに保存したいというケースがあったので参考までにまとめてみます。
DetailFormというフォームオブジェクトそれぞれにa_type~d_typeまでの値が保持されている。また下記の内容を親フォームがdetailsというaccessor名で保持しているとする。

“`ruby
[#,
@a_type=”aaa_1″,
@b_type=”bbb_1″,
@c_type=”ccc_1″
@d_type=”ddd_1″>,
#,
@a_type=”aaa_2″,
@b_type=”bbb_2″,
@c_type=”ccc_

元記事を表示

rails resourcesメソッドの使い方

railsのresourcesメソッドを使う上で必要になった知識等を記録。

## 構文
“`ruby:config/routes.rb
Rails.application.routes.draw do
namespace :api do
resources :events, only: %i[index create]
end
end

“`
ルーティングを`get user/index => user#index`みたいな感じじゃなくて、勝手にやってくれる。そのままだと全てのアクションにルーティングされるため`only`を使って使うアクションを限定する。

## RESTful
HTTPリクエストを経由してフロントとバックエンドをしっかりと分けるときの設計思想。railsの開発は基本的にこの設計思想に基づいて行われているらしい。
この設計思想をルーティングに反映するためにちまちま`get api/index => api#index`みたいに書くんじゃなくてresourcesを使うことで簡単に反映させることができる。

## 実際のルーティンを確認するコマンド

元記事を表示

sliceメソッドの使用方法

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

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

# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1

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

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

元記事を表示

ハッシュから任意のキーのバリュー(値)を取得する方法

# はじめに
ハッシュから値を取得する方法について、曖昧に覚えていた部分があったので整理のためまとめます。
間違った解釈をしていたらご指摘ください。

## ハッシュの取り出し方
例えば以下のようなハッシュが存在するとする

user = {name: タロウ, age: 15, height}

userというハッシュ名から任意のキーのバリュー(値)を取り出すためには、

puts user[:name]
⇨”タロウ”

ここで少し落とし穴がある。
railsで開発を続けていると、ついついテーブルの値を取得する延長線上で

puts user.name

で値を取り出したくなるが、これでは「nameの変数が未定義ですよ」とエラーが出ます。

これはなぜ起きるのか・・・
ズバリ原因は、ゲッターセッターが定義できているかと、ActiveRecord::Baseの存在のせいです。

## ゲッター、セッターとは
以下の記事を参考にしました。

https://qiita.com/k-penguin-sato/items/5b75be386be4c55e3ab

元記事を表示

[Rails6.0] form_withのlocal trueの必要性

mac OS バージョン11.6
Rails 6.0.4

未だにRails6.0を使ってる方は少ないと思いますが、一応備忘録として残しておきます。

# はじめに
他ユーザーをフォローする機能を付けたところ、フォローボタンを押しても動かない。。
エラーメッセージも出ないためどこが間違っているのかわからず悪戦苦闘しました。

該当のコードは以下になります。

“`ruby:
<%= form_with(model: current_user.relationships.build) do |f| %>
<%= hidden_field_tag :follow_id, user.id %>
<%= f.submit 'Follow', class: 'btn btn-primary w-100' %>
<% end %>
“`

# 原因
***Ajax通信***だった。
フォームの送信ボタンを押してもクルクルしない(画面がリロードしない)ことが原因でした。

# 解決策
“`local: true“`を追記したら動くようになりました。

“`

元記事を表示

Redmine 2.5からRedmine 4.2へアップグレードする

社内からの要望でRedmineをアップグレードすることになりました。

使っていたのはRedmine 2.5。これを新しいものにアップグレードします。

# どうやってすればいいのか

Redmineのインストールには若干苦手意識があったのですが、調べてみるとRedmine 1からRedemine 4にアップグレードをしている人がいました。

【1.3.0 → 4.1.0.stable】Bitnami Redmineのサーバー移行&バージョンアップデート!【引っ越し】

言われてみればそうだなと思ったのですが、Railsで組まれているのでマイグレーションしていけば最新版になるはずです。
正直アップグレード方法はこれでOKですので、この通り進めます。
ということで、これをもとにRedemine 4とRedmine 5の試用環境を作って、どちらが良いかを社内の人に決めてもらうことにしました。
試用環境はアップグレード手順の検証にも使えるので添付ファイル以外は移行して操作感を比べてもらうことにしました。

# 構成

最終的にRedmine 4.2に移行することにしました。
理由はいくつかありますが、大きくは以下の3つです。

– Re

元記事を表示

Rubyのクラスのアクセサについて

Rubyのクラスについて、インスタンス変数の参照・代入とそれを可能にするattr_accessorをまとめます。

クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。
selfと@の違い、selfと()の省略については[こちらの記事](https://qiita.com/bellmmm/items/f309bcddb71db53da662)をご確認ください。
インスタンスメソッド、クラスメソッド、メソッドの呼び出し制限によるプライベートメソッドについては[こちらの記事](https://qiita.com/bellmmm/items/c06acf71aeed07b3cd7f)をご確認ください。

# インスタンス変数に対する読み取りと書き込み

## インスタンス変数は直接参照・代入できない
インスタンス変数は、クラスの中では参照(値を取り出す)・代入が可能ですが、クラスの外からは直接参照・代入はできません。
例) インスタンス変数を直接参照・代入するとエ

元記事を表示

Rubyのクラスのメソッドの種類について

Rubyのクラスについてインスタンスメソッド、クラスメソッド、メソッドの呼び出し制限によるプライベートメソッドをまとめます。

クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。
selfと@の違い、selfと()の省略については[こちらの記事](https://qiita.com/bellmmm/items/f309bcddb71db53da662)をご確認ください。

# インスタンスメソッド
## インスタンスメソッドとは
インスタンスメソッドはクラスのインスタンス(実体)に紐づけられるメソッドです。
## 使い方
クラスの中にメソッドを作成するとインスタンスメソッドになります。後述するクラスメソッドとは異なり、呼び出す際にはインスタンスの作成が必要です。`インスタンス名.メソッド名`で呼び出します。
## 例)Calculationクラスのインスタンスメソッド
“`ruby
class Calculation
def addition(a, b,

元記事を表示

OTHERカテゴリの最新記事