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

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

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メソッド内のルール

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

元記事を表示

privateメソッドはクラスメソッドで使えない理由から学んだことメモ

# コード例

“`ruby
class Hoge

def self.xxx
yyy
end

private

def yyy
‘呼んだ?’
end
end
“`

“`ruby
Hoge.xxx
=> NameError: undefined local variable or method `yyy’ for Hoge:Class
“`

# 原因
– スコープの違い
– カレントオブジェクトが異なるため、そんなメソッドないよと言われてしまう

## privateメソッドとは
「self以外のレシーバを指定して呼び出すことができないメソッド」(Ruby2.7以降)
self以外のレシーバが指定できない = **外部から呼び出しされることがない**メソッド

しかし、レシーバが指定できないだけでそれ以外はpublicメソッドと変わらない。
そのため、スーパークラスのprivateメソッドをサブクラスで使用することは可能。(レシーバの指定をしなくてもメソッドが呼び出されるから)

“`ruby
class Hoge

private

元記事を表示

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| %>

元記事を表示

フラッシュメッセージの日本語化

## はじめに
フラッシュメッセージの日本語化について自分自身戸惑ってしまった事があったので記録して残しておきます。

## 日本語の言語設定
config.i18n.default_locale = :jaをapplication.rb追加します。

“`ruby:config/application.rb
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.1 config.i18n.default_locale = :ja end end ``` ## Gemfileの追加 Gemfileに'rails-i18n'を追加します。 ```ruby:Gemfile gem 'rails-i18n' ``` bundle installを忘れないように! ## 日本語化ファイル作成 下記の物に書いてある文章に応じて日本語化され

元記事を表示

フリマアプリにコメント機能の追加実装をする ※コメントが保存されないエラーが出続けた話。

フリマアプリ作成が一段落して、追加の実装としてコメント機能の実装に取り組みます。
itemsコントローラー
“`ruby
before_action :set_item, only: [:edit, :show,:update]
def show
@user = @item.user
@comment = Comment.new
@comments = @item.comments.includes(:user)

end
private
def set_item
@item = Item.find(params[:id])
end
“`
commentsコントローラー
“`ruby
class CommentsController < ApplicationController def create @comment = Comment.new(comment_params) if @comment.save redirect_to item_path(params[:item_id])

元記事を表示

【Rails】Railsチュートリアルのseeds.rbをリファクタリングする

# 目的
Railsチュートリアルにて、`seeds.rb`を用いて任意の数のユーザーとそれに対するマイクロポストの作成をおこないました。
先輩エンジニアに見てもらうと「リファクタリングできるよ〜」とのことだったので、その方法をまとめます。

# 何が問題なのか?
まずは`create`メソッドの使い方をおさらいします。
例として今、`number`というキーをもつ`Number`モデルから、インスタンスを5つ作成することにします。

“`ruby: レベル1
Number.create!(number: 1)
Number.create!(number: 2)
Number.create!(number: 3)
Number.create!(number: 4)
Number.create!(number: 5)
“`
毎回`Number.create!`を実行するパターンです。
この方法では`create!`メソッドを5回おこなっていることになります。
`create!`メソッドは実行するとSQL文を発行し、DBへアクセスします。
つまりこの方法では5回DBにアクセスし、それだ

元記事を表示

[rails 初心者]同率順位を踏まえたランキング機能(修正版)

初めに

前回作成したランキング機能にて、**1点だけ**動作不備が見つかりました。
今回はそのバグを解消する記事になります。
(因みに前回の記事をまだ読んでいないという方は、前提条件のところにリンクがあるので
よかったら読んでみて下さい!!)

前提条件

`前回までの記事`が一通り終了していること(因みに次の3つです)
①**レビューの基本** = 評価関係の処理についてまとめた記事です
②**レビュー機能+@(応用)** = 「評価点の`平均値化`」と「その平均値順に`並び替え`」を行いました
③**ランキング機能の追加** = `同率順位を考慮したランキング機能`を実装しました。

リンクはこちら

[[rails初心者]複数権限でのログインを使ったレビューサイトの作成(基本)](https://qiita.com/about10/items/0e376c84022f2ac238d0)
[[rails初心者]複数権限でのログインを使ったレビューサイトの作成(応用)](https://qiita

元記事を表示

本番環境で画像などを上手く反映する方法

開発環境では画像は表示されるが、本番環境では画像表示されない初歩的なミス

## 状態
開発環境では画像は表示されるのに本番環境にgit pullをすると画像などが反映されない問題

## 順序
“`rb
git pull origin main
“`
ここで勝手に本番環境で反映されるものだと思っていましたが本番環境には変更を取り込んだだけで、動作させるアプリケーションには反映されないそうです。

“`rb
bundle exec rails assets:precompile RAILS_ENV=production
“`
この一文を打ち込んであげる事で無事に反映されました。
とても初歩的なミスかもしれませんが慣れないデプロイでの作業であったので今後の教訓の為に残しておきます。

最後に補足としてCSSやJavaScriptを開発環境で追加した際にも上記に記載されているコードで本番環境に反映する事が出来るので是非試してみてください。

元記事を表示

Flyデプロイエラー解決編(Windows)

今回はfly.ioのエラー解決に向けての記事です!

## ①yarnについてのエラー解決
Dockerfileの25行目付近を以下のコードを追加
“`ruby:Dockerfile
ARG NODE_VERSION=16.14.0
ARG YARN_VERSION=1.22.17 #追加コード
ARG BUNDLER_VERSION=2.2.32
“`
同じくDockerfileの48行目付近を以下のコードに変更
“`ruby:Dockerfile
#変更前
RUN volta install node@${NODE_VERSION} yarn
#変更後
RUN volta install node@${NODE_VERSION} yarn@${YARN_VERSION}
“`

元記事を表示

【備忘録3】Ruby:異なる文字で文字列を分解したい

これまで文字列の分割にはsplitメソッドを用いてきました。

しかし、それは1種類の文字の場合、例えば ”,” のような、だけで、複数の文字で分割しなければならない場合には対処できませんでした。

このような場合の解決策をいろいろ調べたのでメモとして残します。

# 異なる文字で文字列を分解するには、gsubメソッドとsplitメソッドを使う

考え方としては異なる文字を、同じ文字に置換してから分割すればいいらしい。

確かに、同じ文字にしてしまえばsplitメソッドを用いて分割ができますね。なるほどなるほど。

ですが、ここで問題になるのは、どうやって異なる文字を同じ文字に置換するかということです。

この問題の解決のためには、gsubメソッドを用いるといいらしいです。

## gsubメソッドの使い方

gsubは正規表現のパターンにマッチした文字列をすべて置き換えるためのものです。

基本的な構文は以下の通りです。

“`ruby
置換対象の文字列.gsub(/置換前の文字列/,置換後の文字列)
“`

対象の文字列から置換対象の文字を探し、指定した文字で置換するのがgsu

元記事を表示

Rails impressionist gemについての問題

# 使用環境
rails 6

# 問題点
作成したアプリにimpressionist gemを導入して、テストコードを組んだのですが、
NoMethodError:
undefined method `cookie_value’ for nil:NilClass
というエラーが出力されてしまう。

# 改善内容
色々と調べていくとver2.0にそういうエラーがあり、古いバージョンか改修したものを
インストールしないと改善できないみたいです。

“`Ruby
gem ‘impressionist’, ‘~>1.6.1’
“`
バージョンを指定して、bundle installし直すと、エラーは出力されなくなりました!
rails 6は最新のバージョンを

# まとめ
GitHubやGemの説明文はしっかりと読んで、参考にしましょう。

## 参照
https://github.com/charlotte-ruby/impressionist
https://stackoverflow.com/questions/64969386/undefined-method-co

元記事を表示

Ruby テストコードについて(解決編)

# 概要
以前質問もさせていただいた内容がアドバイスいただいた内容で改善したため、そのアウトプットを実施する

# 内容
コントローラーのテストコードにて、response.bodyでHTMLの要素を確認したいにも関わらず
値が取得できないというエラーが表示されました。
テスト用のデータはFactoryBot+Fakerにて生成しており
テストコードのエラーを確認しても値自体は生成できていることは確認できました。

# 具体的なエラーとコード
### 発生している問題・エラー
“`ターミナル
Failure/Error: expect(response.body).to include(@article.title)
expected “\n\n \n GoalF\n \n \n \n

\n

© Goalf

\n

\n

元記事を表示

Scheduling tasks using the Whenever Gem — Ruby On Rails

**Introduction About the Cron Job**

Hi Everyone! In this post, I want to share with you a little guide that will show you how to use cron jobs in a Ruby on Rails application.
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952337/e093575d-6f30-13ab-b149-b87f6ffe3c76.png)
## What’s a Cron Job?

A cron job is a process that is scheduled to run at a certain time (every minute, day, week, or month). On Unix systems, we can run and manage these types of processes using the **c

元記事を表示

【爆速】RailsとDockerで環境構築〜立ち上げまで

今回は、RailsとDockerの環境構築をして簡単なアプリケーション作成までざっくりとまとめてみました。

この記事にした経緯として、これまでは、主にRuby on Rails(以下 Rails)を使った社内のシステムや副業で運営していたサブスク型のサービス開発をしていたのですが、ここ1年以上Railsを触る機会がなかったので、改めて触ってみようというところです。

みなさんにも、これからRubyやRailsに興味を持って頂き、始めやすいように、簡単に紹介・解説していきたいと思います。

では早速、本題に入りましょう!

## 今回の記事内容

1. そもそもRubyとは?
2. RubyとRuby on Railsの違いと開発事例
3. Dockerとは?
4. RailsとDockerの環境構築
5. 簡単なアプリケーションの作成

## ①Rubyとは

![ruby.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949803/864e5d90-40a4-a528-a7b7-982eeb6b

元記事を表示

RSpecとSimpleCovでテストカバレッジを見るには

## はじめに
RSpec入門中に、単純なRubyプログラムをRSpecとSimpleCovでカバレッジを見たくて調べた結果をまとめておきます。

環境は
Ruby 2.7.0
RSpec 3.11
SimpleCov 0.21.2

## アプリケーションコードとテストコード
この2つのコードは同じディレクトリにあると仮定します。
“`ruby:foo.rb
class Foo
def initialize(v)
@v = v
end

def bar
@v == 0 ? 1 : 2
end
end
“`
特に意味のないサンプルコードです。

“`ruby:foo_spec.rb
require “simplecov”
SimpleCov.start do
enable_coverage :branch # branch coverageを有効に
end

require_relative “foo”

RSpec.describe Foo do
describe “#bar” do
it “0なら1を返しそれ以外なら2を返す”

元記事を表示

Virtualbox + Vagrant における共用ディスク構成

Db2 11.5.8 がLinux 環境において Pacemaker による共用ディスク構成をサポートした。
その挙動を確認する為に、Virtualbox上に共用ディスク構成を用意したが、その際に引っかかった箇所の備忘。

# 目的
Virtualbox + Vagrant 環境で、共用ディスク構成をデプロイする

# 環境
– Fedora Linux 36 (Workstation Edition)
– Vagrant 2.3.1
– VirtualBox 6.1.40

# Vagrantfile例

“`ruby:Vagrantfile
file_shared_disk = ‘sdisk.vdi’
size_shared_disk = 1

Vagrant.configure(‘2’) do |config|
%w(node1 noder1540482).each do |_node|
config.vm.define _node do |ins|
ins.vm.box = ‘fedora/36-cloud-base’
ins.vm.box

元記事を表示

大学掲示板アプリの開発

Railsで大学掲示板アプリのポートフォリオを作成しました。

![スクリーンショット 2022-10-31 17.24.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569989/7e729aee-62d9-79dc-65bd-a274625db5ed.png)

サンプルログイン
改善点
ID usasa2121121
PASS samplesample

github
https://github.com/takoyan33/hokuseikeiziban

## 目的

背景や目的としては、自分が通っている大学の掲示板サイトがあれば、学生同士で講義や大学について情報共有ができ、便利だと感じたからです。

## 使用言語

・フロントエンド:Ruby on Rails, Ruby
・バックエンド:MySQL
・コンテナ:Docker
・デプロイ:Heroku

## 作った機能
### 記事投稿機能

![スクリーンショット 2022-10-31 17.25.06.png](https:/

元記事を表示

【Rails】Twitterクローンを作ってみた〜ツイート機能編〜

## はじめに
[【Rails】Twitterクローンを作ってみた 〜ユーザー詳細ページの作成〜](https://qiita.com/bloom__fu/items/8cb6002c44d7eb998358)の続きです。こちらを前提に進めていきますので、まだご覧になっていない方はそちらからご覧ください!※こちらはdockerでの環境構築を省きます。
## サービス環境
– ruby 3.0.0
– Rails 6.0.4
– docker
– mysql 8.0.2
– Slim, SCSS

## ツイート機能作成
#### 条件
– 「つぶやく」ボタンクリックで新規ツイート作成ページに遷移
– テキストを入力し投稿することでトップページにツイートが表示される。
Tweetモデルの作成をし、UserモデルとTweetモデルを関連付けさせてください。Tweetは最大140文字までとします。また、Tweetモデルのテキスト部分のカラム名はtextとしてください。
#### 実装流れ(簡略)
① Userモデルに紐付けたTweetモデル作成(textカラムを持つ)
② db:migrat

元記事を表示

【備忘録2】Ruby:配列の合計値の取得方法まとめ

合計値の取得方法がいまいち整理できていなかったので、わかっている範囲で整理します。

# 想定読者

– Ruby初心者

# 配列の合計値の取得方法まとめ

合計値を取得する方法には下記のようなものがあります。

– sumメソッド
– injectメソッド
– forループ
– eachループ

ではそれぞれの使い方を整理します。

# sumメソッド

sumメソッドは配列内の値を合計してくれます。

“`ruby
array = [1,2,3,4,5,6,7,8,9,10]
total = array.sum
puts total #=>55
“`

こんな感じですね。もし、配列内の文字列の値を、数値で合計したい場合は要素を加工するようにしましょう。

“`ruby
array = [“1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9″,”10”]
total = array.sum{|array| array.to_i}
puts total #=>55
“`

# injectメソッド

injectメソッドもsumメソッドと同じように呼び出した配

元記事を表示

本番環境でToken can’t be blank とでる

Railsでフリマアプリ作成の際、本番環境でToken can’t be blank とでた。
ローカルではうまくいったのに・・・
以下試したこと

・公開鍵と秘密鍵が環境変数に正しく設定されているか確認した
ターミナルにて
“`terminal
vim ~/.zshrc
“`
を使って確認
・JavaScriptの方で環境変数を呼び込む記述を確認した
“`ruby
Payjp.setPublicKey(process.env.PAYJP_PUBLIC_KEY);
“`
・heroku logs –tail をつかって中身をみると、
“`terminal
2022-10-31T04:18:04.579549+00:00 heroku[web.1]: Idling
2022-10-31T04:18:04.589889+00:00 heroku[web.1]: State changed from up to down
2022-10-31T04:18:05.370935+00:00 heroku[web.1]: Stopping all proces

元記事を表示

OTHERカテゴリの最新記事