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

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

listen (LoadError)

# はじめに
AWSのリモート上でpumaを起動させた所、エラーが出た時ので備忘録として書かせて頂きます。

# 環境
ruby 3.0.2
rails 6.1.4
puma 5.4

# エラー
![スクリーンショット 2022-04-07 19.41.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594478/32c6c251-4644-d3dc-8d3e-a1f76ad32ede.png)
LoadErrorだったので、listenのファイルを確認したところ、ファイルがあったので、listenのgemがないのかと思いGemfileを確認した所あるのに何故エラーが出るのだろう?

# gem listenとは
ファイルの変更、追加、削除を検出するものみたいです。

# 原因
Gemfileをよく見てみると…:bulb:
![スクリーンショット 2022-04-08 11.38.18.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

ユーザー新規登録機能に画像登録も追加する方法【Ruby on Rails】

まずは完成イメージから。
こんな感じで、新規ユーザー登録画面でユーザーアイコン用の画像も設定出来る仕様を実装してみます。 ちなみに、画像の登録は面倒だし、取りあえす画像は設定しないといった場合にはデフォルトで画像が自動で設定される仕様になっています。

![スクリーンショット 2022-04-08 9.54.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2316171/ffb3997b-dfca-e89e-b108-abd87b01cb7b.png)

## コントローラーで、createアクションの設定

“`:app/controllers/users_controller.rb
def create
@user = User.new(user_params)
image = params[:user][:user_image] ← この行を追加
hash = SecureRandom.hex(10) ← この行を追加
@user.user_imag

元記事を表示

NameError (uninitialized constant Sidekiq::Logging)

– [「現場で使える Ruby on Rails 5速習実践ガイド」](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)の「Chapter7-8 非同期処理や定期実行を行う(Jobスケジューリング)」を進めていたところ、“`sidekiq“`の実行でハマってしまいました。
# 1.開発環境
“`Ruby:terminal
$ ruby -v
ruby 2.6.9p207 (2021-11-24 revision 67954) [x86_64-darwin19]
$ rails -v
Rails 5.2.7
“`

# 2.はまったこと
“`bundle exec sidekiq“`を実行したところ、次のようなエラー

元記事を表示

Rails コメント機能を非同期通信(Ajax)を用いて実装したい!

## はじめに
プログラミング初学者の自分用アウトプットです。
誤った知識や記述があれば教えていただけると幸いです。

## 開発環境
– ruby2.6.3
– rails6.1.4

## 前提条件
本を投稿するWebアプリを作成中
– ユーザー機能実装済(Userモデル(device導入))
– 投稿機能実装済(Bookモデル)
– コメント機能実装済(BookCommentモデル)

## やりたいこと
– ユーザーがコメントを投稿した際に、ページをリロードせずにコメントの投稿ができる。
– ユーザーがコメントを削除した際に、ページをリロードせずにコメントの削除ができる。

###### コメント機能を使用した際に、ページを部分的に更新できるようにしたい!
## 実装の流れ
#### ●jQueryを導入
“`ruby:Gemfile
gem ‘jquery-rails’
“`
“`ruby:javascript/packs/application.js
import “jquery”;
“`
“`
$ bundle install
“`
#### ●view

元記事を表示

Rails 7.0.2にアップグレード後、SQLインジェクションの危険性のあるクエリがエラーになった

# エラー内容

エラー内容は以下。

“`text
ActiveRecord: :UnknownAttributeReference: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s): “field(id, ?)”.This method should not be called with user-provided values, such as request parameters or model attributes. Known-safe values can be passed by wrapping them in Arel.sql().
“`

要は、「field(id, ?)はSQLインジェクションの危険があるから、危険じゃないことを確認できてるならArel.sql()で囲め」とのこと。

エラー出た部分のコードは以下の様な感じ。

“`ruby
User.where(id: ids).order

元記事を表示

Fakerを使用したランダムの値の出力

# アウトプット
Fakerとは、ランダムな値を生成するGem。

###### (例)
“`ruby
% rails c

[1] pry(main)> Faker::Internet.free_email
=> “georgina@yahoo.com”

[2] pry(main)> Faker::Internet.password(min_length: 6)
=> “9DfWbC3gZsZ5cL”
“`

###### (FactoryBotで記述する場合)
##### spec/factories/users.rb
“`ruby
FactoryBot.define do
factory :user do
email {Faker::Internet.free_email}
password {Faker::Internet.password(min_length: 6)}
password_confirmation {password}
end
end
“`

# 学んだこと
F

元記事を表示

Rubyのややこしさ

rubyのややこしさ①
いくつもほぼ同じことをするコードがある
“`ruby:出力するprint系コード
print(“hello world”)
#これは良い

printf(“hello world”)
#まだ大丈夫

puts “hello world”
#うーん…ギリギリ良いかな…?

p “hello world”
#うん、いらない
“`

rubyややこしさ②
繰り返しコードの多さ
“`ruby:繰り返し
for i in 1..10 do
print(“hello”)
end
#大丈夫、全然普通

while 1 < 5 do print("hello") i = i + 1 end #forとwhileは全然問題ない x = 3 until x <= 0 do print(x,"\n") x = x-1 end #はぁ…まぁ良いけどさぁ x = 1..10 x.each do print("hello!","\n") end #いらない…かな? 5.upto(10) do print("hello! "

元記事を表示

FactoryBotを使用したインスタンス生成の共通化

# アウトプット
FactoryBotとは、インスタンスをまとめることができるGem。

###### spec/factories/users.rb
“`ruby
FactoryBot.define do
factory :user do
email {‘test@com’}
password {‘abcdef1234’}
password_confirmation {‘abcdef1234’}
end
end
“`

“`ruby
# FactoryBotを使用しない場合
user = User.new(email: ‘tset@com’, password: ‘abcdef1234’, password_confirmation: ‘abcdef1234’)
# FactoryBotを使用する場合
user = FactoryBot.build(:user)
“`

###### spec/models/user_spec.rb
“`ruby
require ‘rails_help

元記事を表示

SNS認証について

# SNS認証について
– 学習マッチングサイトを作成して、google認証を実装したい
– 認証機能について理解を深めたい
## 環境
– AWS:EC2,RDS(MySQL),VPC,Route53
– webサーバー:NGINX
– アプリケーションサーバー:Puma
– フレームワーク:Ruby on Rails

## 認証の仕組みについて
今回はgoogle認証であるため、登場人物は、

– googleのリソースサーバ
– エンドユーザー
– webアプリ
– googleの認可サーバー

です。
### リソースサーバーとは
リソースサーバとは、保護対象のリソースを保持しているサーバーを指します。ここでいうリソースとは、googleフォトの画像やプロフィール情報等のことと思います。
### ユーザー
リソースオーナであり、アカウントを連携したいユーザーを指す。
### webアプリ
これは、つまり、学習マッチングサイトです。
### 認可サーバー
リソースサーバーに信頼されたサーバーで、リソースオーナーの認証を行い、リソースサーバーに対するアクセストークンを発行します。

元記事を表示

Active Storageの複数ファイルを1つのzipファイルに圧縮する効率の良い方法

とある案件で、Active Storageで管理しているファイルを複数選択して、1つのzipファイルに圧縮する要件があったので実装方法を検討しました。

# 前提

この記事では下記のUserモデルの`save_selected_avatars`メソッドの実装方法を検討します。

“`ruby:user.rb
class User < ApplicationRecord has_one_attached :avatar class << self def save_selected_avatars(user_ids) # TODO: user_idsで指定したユーザーのavatarを1つのzipファイルに圧縮して保存する end end end ``` なお、この記事では下記のバージョンを使って動作確認しています。 ZIPファイルを生成する処理はrubyzipのGemを使います。 * ruby 3.1.1 * rails, activestorage 7.0.2.3 * rubyzip 2.3.2 # 実装方法検討 ## その1 ま

元記事を表示

if式やループのネストを減らす方法まとめ

# 結論

– 早期リターンする
– 条件式で代入を行う

以上のやり方でネストを減らすことができます。

### 早期リターンする

例えば、受け取った数字が50より大きいとき2倍にする関数があるとき

早期リターンしない場合。
“`ruby
def double(number)
if number > 50
number * 2
end
end
“`

早期リターンする場合。
“`ruby
def double(number)
return if number <= 50 number * 2 end ``` ループ内の場合は`next if number`でも良いですね。 ### 条件式で代入を行う 例えば、ユーザーを1つ取り出して何かしたいとき 条件式で代入しない場合 ```ruby def update user = User.find(params[:id]) if user ... end end ``` 条件式で代入する場合 ```ruby def update if user = User.find(par

元記事を表示

Rubyの基本的な構文をまとめてみる

# 初めに
こんにちは!都内でWEB制作を中心に活動しているりょうといいます!
今回はShopifyをきっかけに興味を持ったRubyの簡単な構文について、備忘録的にまとめていきます!

shopifyはRubyをもとにして作られたliquidという言語があるそうで、バックエンド全くの未経験の僕がいきなり始めるにはあまりにも敷居が高い。。。
それならRubyから始めてみよう!!

そんな経緯があってこの記事を書いた次第です!

## この記事の目的
Rubyの基本構文を忘れないうちにアウトプットする!

ではいきましょう。

### テキストの出力
~~~ruby
# コメントアウトは”#”でできる!
puts “Hello Ruby!”
puts 8
# 出力結果:Hello Ruby! 8
~~~
Rubyのテキスト出力は『puts』
言語ごとに出力方法は違うようですが、個人的にはputs、とても好きですね。
なんかかわいい

また、Rubyにおいては『文字列』と『数値』の連結はできないようです。
これは注意が必要ですね。
~~~ruby
puts “string” + 10
#出力

元記事を表示

【Python】Pythonの型名が覚えられなかったのでメモ

Java, Rubyの実務経験があり、Pythonも覚えてみたいと考えた今日このごろ。
型の種類と名前が全く一致しなかった戒め。

下記のフォーマットで自分用にメモ
###### 大枠のジャンル
“`
・Pythonでの呼び方
 ・Java, Ruby(他覚えやすかったキーワードなど)での呼び方

※あれば感想など
“`

###### 数値
“`
・int
 ・整数

・float
 ・小数点

※散々やってきたので大丈夫。小数点の計算 ^ Javaのときは「BigDicimal」を使わないとダメだぞ!と怒られた記憶がある
“`

###### 論理
“`
・bool(Yes / No)
 ・boolean
“`

###### 文字列
“`
・str
 ・String

※大した違いじゃないからまぁいいんだけど、こういう微妙な違いがあると困るよね。
“`

###### シーケンス
“`
・list
 ・ArrayList(Java)(後から追加できるからArrayListで覚える)

・tuple
 ・list(配列)(後から変更できないからlistで覚える)

元記事を表示

bundlerまとめ

# how2use
bundle init
-> Gemfile

source “rubygems”

元記事を表示

debug gem まとめ

# how to use
s
q!

continue
finish
next
help
help next
p n

元記事を表示

PHP, Ruby の null, blank 判定比較早見表

## PHP, Ruby の null, blank 判定比較早見表

値 | | nil? | empty? | blank? | | isset | is_null | empty | if($var)
— | — | — | — | — | — | — | — | — | —
未定義 | | ~~NameError~~ | ~~NameError~~ | ~~NameError~~ | | false | ~~Undefined~~ | ~~Undefined~~ | ~~Undefined~~
$var = nil, null | | **TRUE** | ~~NoMethodError~~ | **TRUE** | | false | **TRUE** | **TRUE** | false
$var = true | | false | ~~NoMethodError~~ | false | | **TRUE** | false | false | **TRUE**
$var = false | | false | ~

元記事を表示

rbenvまとめ

# install
brew update
brew install rbenv ruby-build
rbenv –version
brew upgrade rbenv
rbenv init

# how to use
rbenv install -l
rbenv install 2.5.0
rbenv versions
rbenv global 2.5.0

元記事を表示

Ruby で Array や Hash のメソッドを使いこなしたい

Ruby には、多くのメソッドが用意されています。
私もそうでしたが、他の言語は知っていて Ruby を知らない場合、Ruby のメソッドを使いこなせていないことがあります。
他言語経験者が、知っておくべき Ruby の Array, Hash のメソッドをユースケース毎に書きたいと思います。

## 特定の要素を取得する (Enumerable#find)

特定の条件を満たす要素を取得する場合、
ループと if 文を駆使して探すことを考えるかもしれませんが、

“`ruby
tasks.each do |task|
next unless task.state == state

found = task
break
end
“`

`find` 一行で取れます。

“`ruby
found = tasks.find { |task| task.state == state }
“`

## 特定の要素を削除する (Hash#delete_if)

特定の条件を満たす要素を削除する場合、、、(以下略

“`ruby
schedules.each do |key

元記事を表示

Rubyとは?今流行のプログラミング言語の一種Rubyって何?これであなたもプログラミングへの第1歩!

こんにちは!初めまして!現在都内大学3年生になります、重村 倫音と申します。
今回は私が大学2年生の秋学期のうち3ヶ月間で習得したruby言語について簡単に初心者さんにもrubyが何なのかという説明記事を書いてみましたのでぜひ読んでみてください!

まず最初に、Rubyという言語はまつもとひろゆき氏が関数型プログラミングと命令型プログラミングを絶妙にまじ合わせて作成したものであります。その為、様々な面でバランスが取れていて、次に説明するRubyのいいところに繋がるのです。

Rubyというのは、数多くあるうちのプログラミング言語の一種です。主に多くの人に知られているウェブサイト、twitterやcookpadと言ったウェブサービスはrubyを通して作られています。数多く存在するプログラミング言語の中でも、rubyは利用者数がかなり多いです。その人気というのも、

-シンプル
-起動の速さ

という二つの観点が主に挙げられます。

最初にシンプルという観点でプログラミング初心者さんでも簡単に自分のウェブページが作れてしまうところなんです!私自身、プログラミングのプの字も知らずにrubyの

元記事を表示

テストコード(RSpec)の構文

テストコードの大まかな全体構造は、下記の通りである。

“`ruby
require ‘rails_helper’

RSpec.describe …, type: :… do
describe ‘どの機能に対してテストを行うか’ do
context ‘テストを行いたい特定の条件’ do
it ‘どのような状況のテストを行うか’ do
end
end
end
end
“`

元記事を表示

OTHERカテゴリの最新記事