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

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

【覚悟】find, find_by, whereの違い【備忘録】

# find, find_by, whereの違い
この前足元をすくわれたので、もう間違えないという覚悟の備忘録。
基礎的な内容だからこそ今一度。

## findメソッド
**モデルのidで検索してデータを取得できる。**
idでしか検索ができないため、取得対象のデータのidが具体的にわかっている場面で使用する。

該当するデータが存在しない場合は、`ActiveRecord::RecordNotFound`が返ってくる。

## find_byメソッド
**モデルのid以外でも検索条件としてデータを取得できる。**
複数条件を指定できるが、返ってくるデータは最初にヒットした1件のみ

該当するデータがない場合は、`nil`が返ってくる。

## whereメソッド
**モデルのid以外でも検索条件としてデータを取得できる。**
該当するデータが全て返ってくる。

該当するデータがない場合は、空の配列が返ってくる。

### 注意
**whereはActiveRecord::Relationを返す**。これは検索クエリを組み立てるもので、find, find_byの返す検索結果のオ

元記事を表示

ActiveRecordっぽくFirestoreを操作できるgemを作りました(ActAsFireRecordBeta)

## はじめに
ActiveRecordっぽくFirestoreを操作できるgemを作りました。

https://github.com/JunichiIto/act_as_fire_record_beta

## 概要

こんなモデルを定義します。

“`ruby
class Book
include ActAsFireRecordBeta

# 属性の名前と型を定義
firestore_attribute :title, :string
firestore_attribute :published_on, :date
firestore_attribute :page, :integer
end
“`

CRUDする例です。

“`ruby
# Create
book = Book.new(title: ‘An Awesome Book’, published_on: ‘2022-12-01’.to_date, page: 200)
book.save
bool.id #=> IdG0ZWT0I5DucEQuRgoP

# Read
id = ‘IdG

元記事を表示

Ruby on Railsでプルダウン検索機能を実装する(gem不使用)


こんにちは。GeekSalonのプログラミング駆け出しメンターです。
今日はgem(ransack)を使用せずに実装できるプルダウン検索機能についての記事を書こうと思います。
初めて記事を書くので、温かい目で見てくださると嬉しいです。

# 目次
①前提
②開発概要
③実際のコード

## 前提
○開発環境
Ruby 3.0.4
Rails 6.1.6

○前提
・ ListでのCRUD機能実装済み
・ 新規投稿ページでプルダウン機能を実装

## 開発概要
①投稿時にプルダウンで選択した情報を、変数を使って検索をプルダウン式でかける。
②検索用のparamsをコントローラーで作成
・検索したいカラムの選択項目を検索バーにも作成する
③コントローラーで検索した結果だけを表示する変数を作る
・ビューに表示

実装イメージはこちら

ー投稿一覧ページー
![スクリーンショット 2022-12-27 15.19.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【Ruby】4つの等値演算子

# equal?メソッド

以下の例を見てみます。

“`ruby
p “foo”.equal?(“foo”) # => false
“`
これは一見して、同じ値に見えますが、falseが出力されます。
`equal?メソッド`では、内容や値で2つのオブジェクトを比較するのではなく、オブジェクトIDで2つの値比較します。

そしてこれから紹介する他の等値演算子と使い方に注意しなければいけないことは、**equal?メソッドをオーバーライドしてはいけない**ということです。
比較しているオブジェクトの両方が、メモリ内の同じオブジェクトを指していない限りtrueを返してはいけないように動作すべきと考えられています。

# “==”演算子
数値の比較でよくみる演算子です。
数値だけでなく、文字列の比較にも使用できます。

“`ruby
“foo” == “foo” # => ture
1.0 == 1 # => true
“`
FixnumとFloatの比較でも数値が同等であればtrueを返します。

# eql?メソッド
基本的には`==演算子`を同じ動きをしますが、特

元記事を表示

【Rails】なぜcountよりもsizeを使うべきなのか?〜lengthの動きも一緒に確認〜

## 1. はじめに
パフォーマンス向上を考える時、“count“より“size“を使おうという話はよく耳にする。
「“size“だとクエリを毎回発行しないから良いんでしょ」くらいのことは知っていても、実際それぞれのメソッドがどんな挙動をしていて、どう使い分けたら良いかあまり意識せずなんとなくで使っている人は多いのではないだろうか

この記事では実際に3つのメソッドの動きを確認し、「なぜ“count“よりも“size“を使うべき」と言われているのか、また同時にどういう場合にどのメソッドを使ったら良いのかを考えてみたい

## 2. countメソッド
– SQLのCOUNTを使う
– キャッシュの有無に関係なく、毎回クエリを発行する
[GitHub](https://github.com/rails/rails/blob/984c3ef2775781d47efa9f541ce570daa2434a80/activerecord/lib/active_record/relation/calculations.rb#L43-L53)

“`console:conso

元記事を表示

[Rails,Javascript]モーダルウィンドウの実装

チーム開発で活用しようと思った技術をアウトプット投稿
## 目的
以下のようなモーダルウィンドウの実装
商品の写真をクリックすると以下のように表示、背景の黒い部分をクリックすると戻る
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950107/b51c11a5-777b-d3f4-a5ff-cc91f28a67c4.png)

## 開発環境
– Ruby 3.1.2
– Rails 6.1.7
– bootstrap併用(bootstrap自体は実装機能と関係なし)

## 実装手順
### 1.モーダルの設置
モーダルを表示させたいページに以下の記述を行う
例)`index`ページに`show`ページの内容を表示したい場合は`index`に記述
“`(例)index.html.erb

“`
### 2.CSSの設定

元記事を表示

[Rails,Javascript]RailsのviewでJavaScriptを用いて一定時間後に指定したページへ飛ぶ

チーム開発で活用した技術アウトプット投稿
## 目的
– 特定ページを訪れた際、一定時間後指定したページへリダイレクトする

## 開発環境
– Ruby 3.1.2
– Rails 6.1.7

## 基本的な書き方
指定したいページに下記`script`を記述

“`.js

“`
– `action`内の`window.location.href = ‘URL’;`で遷移先を指定
– `time`内の5*1000で秒数を指定(ミリ秒で指定する。1000 = 1秒)
– `setTimeout`で`time`に指定した時間経過後に`action`を実行

## 問題点
この記述をしたページから違うページに飛んだ場合でも実行されてしまう
※指摘してくれたチームメイトに感謝

例)Aboutページに指定している、指定

元記事を表示

【Rails】相互フォロー同士のDM機能(非同期通信)

## 初めに
私は普段、適当にプログラミングを勉強している@takakouと申します。今回作成した「相互フォロー同士の「DM機能(非同期通信)」は自分のアプリに、相互フォローをしているユーザ同士の1対1のDM機能を実装したい方向けです。色々DM機能の作成方法について記事を漁ってみたのですが、相互フォローしているユーザ同士の1対1のDM機能に特化した記事が少ないと感じたため、今回の記事の執筆に至りました。

## 前提

 フォロー・フォロワー機能が実装されているという前提のもと今回の記事を執筆していきます。前提としての機能が完成していない場合は下記の@Hbk__17さんの執筆された記事を参考にしていただき、フォロー・フォロワーの機能を実装していただくことを推奨いたします。

https://qiita.com/Hbk__17/items/a6b96009154542d04269

## 動作環境
・PC : **MacBook Air(M1,2020)**
・RAM : **8GB**
・OS : **macOS Monterey(ver12.1)**
・Ruby : **3.1.

元記事を表示

ループ文

Rubyでループ文のプログラムを作りました。

“`Ruby
for i in 1..3 do
str = gets
puts str
end
“`

このプログラムに標準入力で
“`Ruby
1
2
3
“`
と入力すると

“`Ruby
1
2
3
“`
が標準出力に出力されます。

元記事を表示

ActionDispatch::Request::Session::DisabledSessionError: Your application has sessions disabled. To write to the session you must first configure a session storeが発生した時の対処法

# 概要
– ruby 3.1.2
– rails 7.0.4
– railsはAPIモードで利用
# 結論
config/application.rbに以下の3行を追記すれば解決する。
“`config/applicaton.rb
config.session_store :cookie_store, key: ‘_interslice_session’
config.middleware.use ActionDispatch::Cookies
config.middleware.use config.session_store, config.session_options
“`
参考になれば幸いです。
# 参考文献
– [Rails 7.0.1 with disabled Sessionstore ctionDispatch::Request::Session::DisabledSessionError (Your application has sessions disabled. To write to the session you must first configu

元記事を表示

ruby 練習問題44 (アウトプット用)

times文を使って、以下のようにターミナルに出力されるプログラムを書く問題。
“`
1回目の繰り返し
2回目の繰り返し
3回目の繰り返し
4回目の繰り返し
5回目の繰り返し
6回目の繰り返し
7回目の繰り返し
8回目の繰り返し
9回目の繰り返し
10回目の繰り返し
“`
以下、模範解答
“`ruby
10.times do |i|
puts “#{i + 1}回目の繰り返し
end
“`
以下、解説
times文を使い、puts “○回目の繰り返し”という処理を繰り返し行う。
今回は○回目の○の部分に数字を1ずつ足していかなければいけないので変数を使用する。(今回は変数iとする。)
プログラムなので、1回目の繰り返しではiは0になるので(i + 1)回目の繰り返しとすれば1となる。

元記事を表示

【Ruby】モジュールの名前空間を深掘りするースコープとグローバル名前空間ー

Moduleの名前空間について簡単にまとめます。
書籍中心に勉強していますので、ご指摘あればコメントお願いいたします。

# 名前空間とは
Moduleを使用して、クラスなどの定義した定数が一意になるようにするための手段です。

開発を進めていくと、他のファイルにあるクラス名を重複するなどの問題が起こる。これを解決する手段として用いられます。

# 定義の仕方

定義したクラス名にmoduleをネストして使用します。

“`ruby
module Bar
class Foo
def say
“hello”
end
end
end

foo = Bar::Foo.new
foo.say #=> “hello”
“`
呼び出す場合は`モジュール名::クラス名`の形を取ります。
ここで、インスタンスを作るときに、`Foo.new`だけの形で定義するとエラーが出力されるので注意しましょう。

# 使用する場面

名前空間を使用する時はプロジェクトのディレクトリ構造に名前空間を合わせます。
上のクラスはBarディレクトリ

元記事を表示

引数のデフォルト値について(Ruby)

  

1、メソッド定義のところで、引数にデフォルト値を指定できる。引数の呼び出しで、引数を省略した場合、デフォルト値が適用される。

“`
def introduce(name = “山田”) # 山田がデフォルト値
puts “私は#{name}です。”
end

introduce(“島田”)
introduce()
“`
出力結果
“`
私は島田です。
私は山田です。
“`
2、引数呼び出して、末尾がハッシュの場合、波カッコ{ }を省略可能。

“`
def introduce(name = “山田”, msg)
puts “私は#{name}です。”
puts “#{msg[:target]}、#{msg[:greeting]}。”
end
introduce(“島田”, {target: “世界の皆さん”, greeting: “こんにちは”})

# { }を省略している
introduce(“島田”, target: “世界の皆さん”, greeting: “こんにちは”)

# デフォルトの値(“山田”)で出力するのでn

元記事を表示

Rails データベース作成 モデルの基本操作

この記事でわかること

      ・Railsモデルの基本操作について。

モデルを作成する

まずは、モデルを以下のコマンドで作成します。

“`Bash:console
rails generate model <データ名:データ型> <データ名:データ型>
rails generate model User name:string email:string
“`

すると以下のようなコードが表示されます。

“`Bash:console
invoke active_record
create db/migrate/20221226012605_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures

元記事を表示

[続] Rails Consoleなど任意の場所、Inlineで任意のViewを任意条件でRenderする

# TL;DR

“`ruby
ac = ApplicationController.new
ac.instance_variable_set(:@user, User.find(42)) # インスタンス変数をインジェクション
ac.render_to_string ‘users/show’, # レンダリングしたいテンプレート
layout: false, # `layout: false`がないとエラー
locals: { params: {} } # ローカル変数が使われる際、セットが必要

=> “\n\n\n\nUser ID: 42\n\n\n\n

User Name: Foo

\n\n\n”
“`

# 本文
去年はとある問題を解決するために、**[「Rails

元記事を表示

Google Analytics 4 のイベントをサーバー側から送信する方法を調べてみた

## はじめに

Google Analytics 4 のページビューやイベントを仕込む際は、クライアント側(View)に仕込むのが多いとは思いますが、サーバー側からイベントを送る必要が出てきたため、その方法についてまとめています。

※「Ruby on Rails」の環境で調査していたので、言語はRubyにて試しています。

## プロパティおよびデータストリームを準備する

こちらに関しましては、細かく説明してしまうと長くなってしまうので、公式のドキュメントへの参照のみとします。
(検索で色々とわかりやすい記事が出てくると思います)

– プロパティ設定
– https://support.google.com/analytics/answer/9304153?hl=ja&ref_topic=9303319
– データストリームに関しては、今回はウェブで進めていきます。

## 測定IDを確認する

先ほど作成したデータストリームから測定IDが確認できるので、そちらを保存しておきます。

– テータストリーム画面から作成した項目を押下します

元記事を表示

Module#concerningとは

## はじめに
[Ateam Group U-30 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ateam-group-u30)の18日目は、 @mayobimu が担当します!

https://qiita.com/advent-calendar/2022/ateam-group-u30

## Module#concerningとは
Rails 4.1.0で追加された機能
Rails 4.0で追加されたActiveSupport::Concernをより使い方の幅を広めることができる

## 何が変わったの?
### ActiveSupport::Concernの場合

– `app/models/concerns/`or`app/controllers/concerns/`からincludeする必要がある

https://qiita.com/mayobimu/items/e05a8f9d496200a0c3ec

### Module#concerningの場合

– 同じmodelsファイルから

元記事を表示

サンプルコードでわかる!Ruby 3.2の主な新機能と変更点

## はじめに

Rubyは毎年12月25日にアップデートされます。
Ruby 3.2は2022年12月25日に3.2.0が正式リリースされました。

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

この記事ではRuby 3.2で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。

ただし、すべての変更点を網羅しているわけではありません。個人的に「Railsアプリケーションの開発時に役立ちそうだな」と思った内容をピックアップしています。本記事で紹介していない変更点も多数ありますので、以下のような情報源もぜひチェックしてみてください。

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

https://techlife.cookpad.com/entry/2022/12/26/121950

https://qiita.com/advent-calendar/2022/ruby

元記事を表示

Map・ハッシュ操作 【Java】【Kotlin】【Ruby】

# 概要
自主学習のアウトプットです。

現場でJavaのMapを操作していた時に、自分の書いたコードがまわりくどいやり方かなと思って調べたらいい方法を見つけたので備忘録です。(実際は周辺のコードと合わなくて使えませんでしたが。。)

学習中のKotlinとRubyで同じことするには?と調べたものも共有します。

# まわりくどいやり方
コードを書いてふと思いました。

「なんやこれ、まわりくど」

思わず声に出てしまったコードがこちら

“`Java:Java
Map pokemons = new HashMap();
pokemons.put(“Pikachu”, “ピカチュウ”);
pokemons.put(“Lapras”, “ラプラス”);
pokemons.put(“Snorlax”, “カビゴン”);
pokemons.put(“Venusaur”, “フシギバナ”);
pokemons.put(“Charizard”, “リザードン”);
pokemons.put(“Blastoise”, “カメックス”

元記事を表示

JITコンパイルをサポートした新たなRuby処理系をRustとアセンブリで書いている話

この記事は[言語実装 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/lang_dev) の24日目の記事です。

## はじめに

 monochromeです。今回はmonorubyという名前の高速なRuby処理系の紹介をします。

 ここ何年か、わたしはruruby[^ruruby]というRubyのインタプリタをRustで書いていて、Advent Calendarでもいくつか紹介記事を書きました。

[^ruruby]:https://github.com/sisshiki1969/ruruby

– [Rustでつくる(つくれるかもしれない)Ruby](https://qiita.com/sisshiki1969/items/3d25aa81a376eee2e7c2)
– [ruruby: RustでつくっているRuby](https://qiita.com/sisshiki1969/items/4d76e69545ca1c26ed48)
– [Ruby処理系自作入門](https://qiita.com

元記事を表示

OTHERカテゴリの最新記事