Ruby関連のことを調べてみた2022年02月22日

Ruby関連のことを調べてみた2022年02月22日
目次

Rails PagyでOverflowエラー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/f15d9091-6c98-17e2-e4f1-9a45a56be116.png)

# Pagyで次のページをクリックするとエラー
Railsでアプリケーションを作っている際にページネーションのGemにPagyを使っていました。
そこで次のページを表示させるために次のページへ移動するためにクリックすと
`Pagy::OverflowError`というエラーが発生しました。

[![Image from Gyazo](https://i.gyazo.com/8f2b1b42590ff5e15860483be3db73a6.png)](https://gyazo.com/8f2b1b42590ff5e15860483be3db73a6)

ほかのページでもPagyは使っていたんですが、そこではエラーは出ておらず
コードを見ても特にタイポとかはなさそうでした。

## 解決方法
PagyのGitHubPageにありました。

ht

元記事を表示

acts_as_listで rails db:migrate:reset すると undefined method `position’ エラー

## 困っていたこと
gemの[act_as_lists](https://github.com/brendon/acts_as_list)をアイテムの並び替えに使っていたところ、下記のようなエラーが発生してrails db:migrate:resetが妨げられる現象がローカル開発環境で多発していた。(一方、本番デプロイは成功していた。)

“`
$ rails db:migrate
== 20210406073220 CreateItems: migrating ===============================
— create_table(:items)
-> 0.0123s
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined method `position’ for #
Did you mean? position=
“`

実装はこんな感じ。

元記事を表示

【個人開発】近くの二郎とサウナを一瞬で検索し、黄金ムーブがすぐできるアプリを作った

ロゴ – 9.png
「近くの二郎系とサウナ一緒に探したいなぁ〜」
「Google Mapは少し探しにくいんだよなぁ」

こんな悩みを解決するアプリ「ジロサウナ〜」を開発しました。

【サービスURL】
https://www.jirosauna.com/maps

はじめに

こんにちは、「二郎とサウナは万能薬」を信じる@botcher_matsuと申します。

言わずもがな、僕は、二郎系ラーメンをすすってからサウナで整うという所謂、「黄金ムーブ」が大好きなのです。

そして、二郎系ラーメンからサウナをキメるという合法麻薬(合法ですよね…?)にハマりすぎた僕の熱意はどんどん膨れ上がりました。

元記事を表示

<初心者>データベースに保存されません

今回も初心者エラーをやってしまいました。

NameErrorが解決できません。

Railsでアプリを実装中、
ここは完璧なんじゃないかってくらい久々な実感を湧いた状態で
エラーなんか起きないだろうと思っていました。

しかし、、、
NameError出てしまいました。

ターミナルも正常に動きパラメーターにもデータが入っている。
binding.pryで止めながらエラーを確認しても空。

なぜだ、、、
どこのネームが間違っていたんだ、、、

まったくわからず今回もパニックのまま何度もコードを見直していました。
すると、

直接コードを見たわけじゃなくちらっと頭に浮かんできた。

あれ、どこかの命名はアンダースコアってだめなんじゃね?

と思って、クラス名に目が止まりました。
すると、

“`
class Product_condition < ActiveHash::Base ``` む、なんか違和感がある。 確かスネークケースとかキャメルケースとか色々あった気がする。。。

クラス名、アッパーキャメルケースじゃないとダメな気がして

元記事を表示

RSpecの書き方2(before do)

# はじめに
今回はRSpec内でテスト前の事前処理をまとめたいときに使用するbefore doについてまとめます
そもそも使ったことがない、1から知りたい場合は下記の記事を合わせて参照してください

https://qiita.com/sekkenn1102/items/9f87748876bbb85f43ac

今回のテストは **「ログイン処理があるwebページでログイン後の処理(マイページ確認など)をテストする」** ことを想定して記載します
# 何も考えずにテストを書くと…
“`request_spec.rb
describe ‘マイページ確認’ do
context ‘ログインしている場合’ do
it ‘「ログインID」の項目があること’ do
post ‘/login_to_application’ params:{id: ‘test_user’, password:’password’} # ログイン処理
get ‘/mypage’
expect(response.body).to include ‘ログインID:’

元記事を表示

ruby のキーワード引数について

##はじめに
Rubyのキーワード引数は、ハッシュだと思って使っていましたが、どうやらそうじゃなさそうだったので、改めて調べてみました。
また、調べてみたところ、バージョンによって挙動が違いましたので、そのことについても記載します。
###検証バージョン
3.0.1

##キーワード引数とは
>キーワード引数とは、引数にキーワードを付けて、順序に関係なく対応する引数を決定する記述方法である。
キーワード引数を使うことで、何を意味するものか分かりやすく、引数に指定する順序を考慮する必要がなくなるメリットがある。

引用[Rubyのキーワード引数](https://tokitsubaki.com/ruby-keyword-arguments/531/)

###通常の引数を使用
次のプログラムでは、3つの仮引数を受け取るメソッドを定義して、呼出し時に3つの実引数を指定しています。

~~~ruby
def greet(first_name, last_name, age)
puts “#{first_name} #{last_name}、#{age}歳です。” # -> 山田 太

元記事を表示

【個人開発】全国の無料キャンプ場を検索し、欲しい情報を一目見て得られるようなサービス【CAMPHOOD】を作りました

## はじめに
みなさんキャンプはお好きですか?キャンプで焚き火を囲んでいるだけでも心が浄化されますよね。焚き火には「1/f ゆらぎ」と呼ばれる成分が含まれていて化学的にその癒し効果が証明されているそうです。焚き火をしながら「1/f ゆらぎ」の声を持つ宇多田ヒカルの曲を聴き、好きなビールでも飲めば大抵の嫌なことなんて忘れてしまいます。僕は焚き火をするのに無料キャンプ場をよく利用しています。コスパ最強の無料キャンプ場を多くの人に知ってもらいたいと思い、このサービスを作りました。

## サービス概要
CAMPHOOD -無料キャンプ場をもっと身近に利用しよう-
URL: https://www.camphood.net
![camphood-logo-yama.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1153603/384bdbad-122a-a683-ab77-678bcb2ba7c2.png)

キャンプに行く前はとにかく情報収集が大事です。僕はいつも下記のようなことをざっと調べていましたが、ま

元記事を表示

DM、チャットにおける通知機能

## 参考記事
1.[RailsでややこしいDM機能を1万字でくわしく解説してみた](https://qiita.com/bindingpry/items/6790c91f374acc25bea2)
2.[【Rails】通知機能を誰でも実装できるように解説する【いいね、コメント、フォロー】](https://qiita.com/nekojoker/items/80448944ec9aaae48d0a)
3. [[Rails] 同じmodelを参照する外部キーを一つのmodelでもつ方法
](https://qiita.com/takeoverjp/items/bb56d6a8eae191cd3732)

## 前提
・DM機能(テーブル設計に関しては参考記事1と全く同じ)
## Roadmap
・モデルの作成
・モデルのリレーション
・通知機能の作成
・モデルに切り出し
・読んだ際に既読になる機能の作成

## モデルの作成
“`
$ rails g model Notification
“`
“`migration_file.rb
class CreateNotificatio

元記事を表示

ActiveAdmin のメニュー設定をすごく便利にする ActiveAdmin::MenuTree のご紹介

ActiveAdminのメニュー設定を便利にする [ActiveAdmin::MenuTree](https://rubygems.org/gems/activeadmin-menu_tree) というgemを作ったのでご紹介します。

### ActiveAdminとは

https://activeadmin.info/

https://github.com/activeadmin/activeadmin

ActiveAdminとは、Railsで管理画面をさくっと作れるフレームワークですね。とても便利です。

元記事を表示

【Rails】繰り返し処理におけるインデックスについて

#each do 文におけるインデックス

“`hoge.html.erb
<% @hoges.each_with_index do |hoge, i| %>

元記事を表示

Ruby on Rails チュートリアル第14章をやってみて & まとめ

#ユーザーをフォローする
■第14章
他のユーザーをフォロしたりフォロー解除したり、フォローしているユーザーの投稿をステータスフィードに表示する機能を追加する。

ここで学んだデータモデルは、今後自分用のWebアプリケーションを開発するときに必ず役に立つらしいので、理解できるよう頑張ります。。

##14.1 Relationshipモデル
`has_many`を使えば実現できるようなものではない。問題は生じてしまう。
それを解決するために`has_many through`について説明する。

###14.1.1 データモデルの問題 (および解決策)
いい加減なモデルを作ってしまうと、とにかく面倒で悲惨なことになる。
データの関係についてしっかり考えて作成する。

userとuserを繋ぐテーブルactive_relationshipsを作成する。
マイグレーション生成。

“`
$ rails generate model Relationship follower_id:integer followed_id:integer
“`

このリレーションシップは今後`follow

元記事を表示

Synology DS218J Redmine立ち上げ(DOCKER)

SynologyのNASのバージョンUPすると、パッケージマネージャからRedmineが消えてしまいました。

# DOCKER-COMPOSEの立ち上げ

“`docker-compose.yml

version: ‘3.8’
services:
redmine:
image: redmine
container_name: redmine
ports:
– 8080:3000
volumes:
– ./data/plugins:/usr/src/redmine/plugins
– ./data/themes:/usr/src/redmine/public/themes
environment:
REDMINE_DB_MYSQL: redmine-db
REDMINE_DB_PASSWORD: redmine
depends_on:
– redmine-db
restart: always

redmine-db:
image:

元記事を表示

Ruby on Rails チュートリアル第13章をやってみて

#ユーザーのマイクロポスト
■第13章
Twitterのミニクローンを完成させる。

##13.1 Micropostモデル
Micropostリソースの最も本質的な部分を表現するMicropostモデルを作成する。

###13.1.1 基本的なモデル
まずはMicropostモデルを生成。

“`
rails generate model Micropost content:text user:references
“`

`ApplicationRecord`を継承したモデルが作られる。そして、`belongs_to`のコードも自動的に追加されている。
理由は、`user:references`という引数も含めていたため。

自動生成されたMicropostモデル。

“`rb:micropost.rb
class Micropost < ApplicationRecord belongs_to :user end ``` `User`モデルとの最大の違いはreferences型を利用している点。 これを利用すると、自動的にインデックスと外部キー参照つきの`user

元記事を表示

ActiveModel::MissingAttributeError: can’t write unknown attribute “ に悩まされた【Rails】

RailsのAPIを一から作っている時に遭遇しました。ググっても全然引っかからないし「もぅマヂ無理。。。リスカしょ。。。」ってなってました。ですが結構基本的なところでポカしてました。

結論から言えば,`primary_key: true`を書き忘れていただけだったのですが。なぜこれでエラーが出たのか考えてみます。

# Railsでprimary_keyのカラムを変える手順

https://guides.rubyonrails.org/active_record_migrations.html#creating-a-table

Railsでprimary_keyを変更する手順は、以下の通りです。

1. `create_table`メソッドに、`id: false`を渡す
1. `create_table`メソッドのブロックに、`primary_key: true`を渡したフィールドを作る

もし`primary_key`自体いらねえよって時は,`create_table`に`id: false`を渡すだけで`primary_key`自体作らなくなります。

お手本は、
“`

元記事を表示

class<

ruby書いているとタイトルのような記述を見たことがある人は多いとおもいます。自分はよくわからなかったので今回の記事でまとめてみようとおもいます。

こういう時はとりあえず公式ドキュメントを見てみようと思ったので見てみました。すると、
>特異クラス方式。複数のメソッドを一度に定義するとき向き
>https://docs.ruby-lang.org/ja/3.0/doc/spec=2fdef.html#class_method

## 特異メソッドとは?
特異メソッドとは1つのオブジェクトに対して適用されるメソッドのことです。実際に例を見ていきましょう

“`
class User
def my_name
puts “自己紹介しましょう”
end
end

ouki = User.new
riboku = User.new

def ouki.introduction
p “秦国最強の将軍である”
end

ouki.my_name
=> 自己紹介しましょう

riboku.my_name
=> 自己紹介しましょう

ouki.introduction
=> “

元記事を表示

【RSpec】raise_error, changeマッチャーを繋げて使いたい

## 例外を投げることを確認しつつ、値が変化することも確認したい

下記のようなクラスがあった時に、
`StandardError`を投げることと、`@num`の値が増えることを確認したい。

“`ruby:テスト対象のクラス
class TestTarget
attr_reader :num

def initialize
@num = 0
end

def call!
@num += 1
raise StandardError
end
end
“`

## 繋げない書き方

`raise_error`マッチャーで期待値を確認する**前後の行**で、値の変化を確認するとこうなる。

“`ruby
RSpec.describe ‘TestTarget#call!’ do
it ‘例外を投げ、@numの値が増える’ do
t = TestTarget.new

# expect { t.call! }.to change(t, :num).by(1) のように書きたいけど、
# 例外が発生するから確認できない

元記事を表示

N+1問題の直感的理解

#N+1問題
例えば、user(has_many :posts)なるテーブルと、post(belongs_to :user)なるテーブルの二つがあるとする。
userは0個以上のpostを持っていて、postには各userのid(user_id)が必ず対応している。
ここで、各userの持っているpostを取り出し、userの名前(user.name)と、postのタイトル(post.content)を全件表示したいとき、どのようなコードを書けばよいだろうか。

最も分かりやすいのは以下のコードだろう。

“`ruby:view
User.all.each do |user|
user.posts.each do |post|
puts “#{user.name} / #{post.title}”
end
end
“`
このコードで実行される内容は、

1. userの情報を取得するために、userテーブルにアクセス
2. id = 1のuserのpostの情報を取得するためにpostテーブルにアクセス
3. id = 2のuserのpostの情報を取得するためにp

元記事を表示

request.env[“HTTP_USER_AGENT”] について

request.env[“HTTP_USER_AGENT”] というのを実務で見かけてよくわからなかったのでまとめてみようとおもいます。

## 何ができるのか?
結論からいうと、これを使うことでどのブラウザからアクセスしているのか、どのデバイスからアクセスしているのかということがわかるんです。
例えば、
“`
request.env[“HTTP_USER_AGENT”].include? “Chrome”
“`
とすることでユーザーがchromeを使ってアクセスしているのか、ということがわかるんです。
また、
“`
request.env[“HTTP_USER_AGENT”].include? (‘Mobile’)
“`
とすることで、アクセスしているユーザーの端末はiOSなのかandroidなのかということが分かります。

MobileはiPhoneやiPadなどのapple製品で、androidはその名の通りandroid系です。

自分はまだ経験したことはないですが、OSやブラウザごとに処理を変えたい時に使うものなんだとおもいます。

以上です。何か間違いがございまし

元記事を表示

継承を使う際の注意点

# 概要

ソフトウェアエンジニアとして働き始めて早一年、それなりに大きなリポジトリのソースコードを扱ってきました。
様々なコードを読み書きする中で、とりあえず仕様を満たすコードを書くだけではなく、どのような設計・アーキテクチャにするかについて考え、勉強するようになりました。
この記事では、実務での経験を踏まえて**クラスの継承**を使う際の注意点について書いてみたいと思います。言語はRubyですが、他の言語を書いている方でも読めると思います。
※コードの内容は実際のものではなく、デフォルメしています。

# 想定読者
以下のような読者を想定しています。

– アプリケーションの設計やアーキテクチャに興味を持ち始めた人
– とりあえず仕様を満たす処理は書けるが、コードがすぐぐちゃぐちゃになってしまう人
– 個人で小さいアプリケーションを開発した経験はあるが、複数人で開発している比較的大きいアプリケーションには触れたことがない人
– プログラミング言語の基本的な文法は理解し、オブジェクト指向などを学んでいる人

# 家の情報を扱う
この記事ではサンプルとして、家(一戸建て)の情報を扱おう

元記事を表示

Ruby on Rails チュートリアル第12章をやってみて

#パスワードの再設定
■第12章
本章では、ここで生成したメイラーにリソースとデータモデルを追加して、パスワードの再設定を実現していく。

##12.1 PasswordResetsリソース
必要なデータをUserモデルに追加していく。11章では`edit`アクションのみだったが、今回はフォームが必要なので`new`アクションと`edit`アクションが必要。

###12.1.1 PasswordResetsコントローラ
パスワード設定用のコントローラを作成する。今回はビューも扱うため、`new`アクションと`edit`アクションも一緒に生成する。

“`rb
$ rails generate controller PasswordResets new edit –no-test-framework
“`

新しいパスワードを再設定するためのフォームと、Userモデル内のパスワードを変更するためのフォームが必要になるので、`new`、`create`、`edit`、`update`のルーティングも用意する。

以下のコードを追加。

“`rb:routes.rb
resour

元記事を表示

OTHERカテゴリの最新記事