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

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

RubocopでRails/Presence: Useと指摘を受ける

RuboCopで下記の指摘を受けました。

“`
Rails/Presence: Use self.カラム名.presence || “hogehoge” instead of self.カラム名.present? ? self.カラム名: “hogehoge”.
“`
“`rb
# 指摘を受けたソース
self.カラム名.present? ? self.カラム名: “hogehoge”
“`
どうやら、presentメソッドではなく、
presenceメソッドというものを使いなさいと指摘されているようです。

下記記事によると、
presenceメソッドは、
オブジェクトが存在すればそのオブジェクトを返し、
存在しなければnilを返したい場合にとても便利なショートカット
…とのこと。

https://techracho.bpsinc.jp/hachi8833/2021_02_26/62326

カラムが存在しない場合は、”hogehoge”という文言を返したいので、
下記ソースに修正。
二回カラム名を書く以前のソースよりシンプルになりました。
“`rb
self.カラム名

元記事を表示

URI.encodeでundefined method ‘gsub’ for nil:NilClass

# この記事のまとめ

– `URI.encode`メソッドの引数にnil渡すと`undefined method ‘gsub’ for nil:NilClass` エラーが出る
– `URI.encode`ではnil避けがされない
– `URI.encode`自体が非推奨なので`URI.encode_www_form_component`を使おう

# 実際に起こった問題

– `URI.encode`メソッドで、URLをエンコーディングしようとした
– しかし500エラーが発生した。
– スタックトレース見ると、`undefined method ‘gsub’ for nil:NilClass` が出ていた

該当コード:

“`ruby
url = post.url
post.url #nil

URI.encode(post.url) #undefined method ‘gsub’ for nil:NilClass
“`

# 対応

– `URI.encode_www_from_component`を代わりに使おう
– 実は`URI.encode`自体もう使うな

元記事を表示

RubyでPythonのようにfor i in range(n)する

# 普通のコード
rubyの普通のrangeオブジェクトだとこうです
“`ruby
(0…n).each do |i|
puts i
end
“`
for文で書き直すと以下。
“`ruby
for i in 0…n
puts i
end
“`
# range関数
しかし、私はPythonのようにrangeを書きたいと思いました。
そこで、以下の関数を定義します。
“`ruby
def range(l, r=nil, s=nil)
return 0…l unless r
return l…r unless s
(l…r).step(s)
end
“`
`range(l)`のとき、`0…l`を返す。
`range(l, r)`のとき、`l…r`を返す。
`range(l, r, s)`のとき、`(l…r).step(s)`を返す。

使い方は以下です。※コロンは不必要、endは必要です。
“`ruby
for i in range(10, 20, 2)
puts i
end
#=> 10
#=> 12
#=> 14
#=

元記事を表示

rbenvで指定してるrubyのversionと、実際のversionが違う時の対処

# rbenvで指定してるrubyのversionと、実際のversionが違う
versionがなぜかあっていない。実際のrubyのversionが更新されない。。
OS: Mac
SHELL: zsh
“`
$ ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]

$ rbenv versions
system
2.6.9
3.1.1
* 3.1.2 (set by /Users/<ホームディレクトリ>/.rbenv/version)
“`

# よくわからんけどrbenv initをする
すると、eval “$(rbenv init – zsh)”を~/.zshrcに追加すれば、rbenvを読み込んでくれるらしいことがわかる。
“`
$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval “$(rbenv init – zsh)”

元記事を表示

crystal の AtCoder における pow の使用(健忘録)

# はじめに
https://qiita.com/Itoi/items/aad133bcd74e147c9e16

@Itoi さんの記事を拝見して、`Ruby`に`Integer#pow`があることを思い出しました。
しかしながら、`crystal`には**mod**する**pow**が無い様です。
とりあえず、自作関数を作ります。
# 自作関数(Ruby)
“`rb
def modinv(n, mod)
n.pow(mod – 2, mod)
end
“`
組み込み関数がありますので、シンプルです。
# 自作関数(crystal)
“`cr
def pow(v, p, mod)
ret = 1i64
while p > 0
if (p & 1i64) != 0
ret *= v
ret %= mod
end
v *= v
v %= mod
p >>= 1
end
ret
end
def modinv(n, mod)
pow(n, mod – 2, mod)
end
“`
自作と言いまして

元記事を表示

Rubyでシーザー暗号のプログラムを実装

Rubyでシーザー暗号のプログラムを作りました。

:::note warn
補足
– まだ暗号化するだけの処理です。
– 英大文字のみ対応です。
– スペースなどは考慮していません。
:::

#### シーザー暗号とは
平文の各文字を辞書順にずらして暗号文にする暗号です。

https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7

#### プログラム

“`ruby
def caesar_cipher(string = “ABC”, shift = 3)
charArray = string.chars.map(&:ord)

charArray.map do |char|
if (char + shift) < 91 (char + shift).chr else (char - 26).chr end end.join end puts caesar_cipher ``` #

元記事を表示

オブジェクト指向とは…?

Ruby学習中に聞いたオブジェクトという言葉がありますが
Rubyという言語自体がオブジェクト指向と呼ばれているらしいです。

参考資料を見ても、ふわふわとした概念だとあるので、
自分なりにまとめてみました。

[1.そもそもオブジェクトとは?](#1-そもそもオブジェクトとは?)
[2.Railsでのオブジェクト指向](#2-Railsでのオブジェクト指向)
[3.現状の認識](#3-現状の認識)
[4.参考文献](#4-参考文献)

1.そもそもオブジェクトとは?

ここでいうオブジェクトとは、
『クラス』や『メソッド』を『モノ』として
置き換えている?ような印象でした。

![スクリーンショット 2022-05-25 23.48.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2687611/3f857595-2eeb-a939-bf8a-f1810e5df602.png)

クラス(モ

元記事を表示

ruby on rails インストール 時の注意点 自分用

https://rubyinstaller.org/downloads/

https://qiita.com/OKIDOKI000/items/25c37dd354aa471f5690

https://qiita.com/za_spa/items/6ca0d01e1156264742ab

https://udon.little-pear.net/msys2-pacman-pgp-update/

https://www.msys2.org/

https://teratail.com/questions/338070?sort=3

https://sappolog.hatenablog.com/entry/programming/ruby/devkit-install

元記事を表示

WindowsにRedmine5.0.1を手動インストールする方法

# はじめに
RubyとかRailsとか一切触ったことがなかったのでかなり苦労したが、なんとかインストールできたので備忘録をかねて記事に残しておく。

# 経緯
Bitnami版を利用すれば手軽にインストールできるのは知っていたのだが、最新版のRubyを利用したかったため、手動でのインストールに挑戦。
※手動インストールのやり方を知っておけば、社内利用においてもソフトウェア脆弱性対応とかにもわりと対応できますし(というかこれが本当の経緯)

# インストール環境
| OS | Windows Server 2019 |
|:-|:-|
| Redmine | 5.0.1 |
| DB | MariaDB 10.8.3 |
| Ruby | 3.1.2 |
| Rails | 6.1.6 |
| Webサーバ | Thin |

※Railsのバージョンは意識していない(勝手に6.1.6が入っていただけ)

# 前提
インターネットに接続できる環境でないとインストールできません。
プロキシサーバ、セキュリティソフトなどの影響もあるとインストールできないこともあるかと。

# 手順

##

元記事を表示

【Rails】ページネーションGem「kaminari」を実装をした記録②(CSSやデザイン適用)

### 初めに

画像投稿アプリを作成している中で、投稿が増えてきたため実装しました。
その過程を備忘録として投稿いたします。

ページネーションGem「kaminari」の導入〜表示の方法は前回の記事でご紹介しています。

今回はデザインを適用させる過程等を記事にまとめました。

### HTML ・ CSSの適用

##### 完成図

![スクリーンショット 2022-05-25 12.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/d3641f38-d5ef-9ef8-3d32-c82150108285.png)

hoverで動きを出した動画

https://gyazo.com/ad3cf10a453b9cf1a76b3d08996cb127

ページネーションをつけたいビューに以下を追加して作成しました。

元記事を表示

【Rails】ページネーションGem「kaminari」を実装をした記録①(導入〜表示)

### 初めに

画像投稿アプリを作成している中で、投稿が増えてきたため実装しました。
その過程を備忘録として投稿いたします。

### kaminariとは?

ページネーションを簡単に実装するためのGemです。
ブログでよく見かける、ページを分割するものです。

公式Git Hubに詳しい使い方が書いてありましたので、こちらも参考にしながら実装しています。

https://github.com/kaminari/kaminari

今回は以下のようなものを作成しました。

![スクリーンショット 2022-05-25 12.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/d3641f38-d5ef-9ef8-3d32-c82150108285.png)

こちらの記事では導入方法〜表示方法を紹介しています。
CSSの適用だけ見たい方は[Rails] Formオブジェクトに使えるmodule

## 概要
Formオブジェクトなどを実装する場合、`ActiveModel::Model`をincludeしたPOROクラスを実装することがあると思います。
この記事ではその際に、追加のmoduleを使ってできることをまとめてみました。

## 環境
Rails: 7.0.3

## ActiveModel::API
まずはこの`ActiveModel::API`をincludeすることから始まります。
これにより、以下のような機能が利用できます。
– `form_with`や`render`などのAction Viewのヘルパーメソッド
– 値のvalidation

### tips
– 値を上書きしたい場合、対象のattributeは`attr_reader`にしておき、`#{attr_name}=`のsetterを定義します。

“`ruby:email_contact.rb
class EmailContact
include ActiveModel::Model

# 値を変更したい場合、ここはattr_readerだけにして、setterメソッドを定義する

元記事を表示

[初心者向け]Rubyを手っ取り早く解説

# 導入
Rubyのインストールは事前に行ってください。
Rubyのコードの実行の仕方も他で検索してください。

専門用語は極力使わないようにしています。
# 解説
## 表示
“`ruby
puts “Hello World!”
“`
`puts`の後に表示したい文字を書くと、表示されます。
表示させるような文字は、基本的に、`”`で囲みます。
“`ruby
puts “Hello World!” #=> Hello World!
“`
`#`以降はコメントになります。ここに何を書いても、プログラムの実行には影響しません。
以下読みやすいように、`#=>`の後に、`puts`で何が表示されるのかを書くことにします。

## 計算
“`ruby
puts 9 + 3 #=> 12
puts 9 – 3 #=> 6
puts 9 * 4 #=> 36
puts 9 / 4 #=> 2
puts 9 % 4 #=> 1
“`
上から順に、「たす、ひく、かける、わる、あまり」です。
数字の計算ができます。(数字は`”`で囲みません。)
## 変数
“`ruby
a = 3
pu

元記事を表示

Rubyメソッド逆引きメモ

Rubyにおける逆引きメモです。「やりたいこと→メソッド」という形にしています。項目ごとに公式ドキュメントへのリンクを付けてますので合わせて参考にしてください。

:::note info
現状は項目を羅列しているだけなので読みづらいかもしれません。
:::

# オブジェクト調査係

サンプル用コード
“`ruby
class User
def initialize()
@name = “bob”
end
end

user = User.new
“`

##### オブジェクトが持つインスタンス変数名を調べる[^1]
“`ruby
p user.instance_variables
#=> [:@name]
“`
– 変数名をシンボルの配列として返します。
– 初期化していない変数は返されません。

##### オブジェクトのインスタンス変数の値を調べる[^2]
“`ruby
p user.instance_variable_get(“@name”)
#=> “bob”
“`
– 引数にはシンボルも使えます。`(:@name)`

元記事を表示

【rails】投稿機能の項目追加

# やること
railsアプリケーションで投稿機能の投稿フォームの項目を追加してみた!

# 現状こんな感じ
“`html:new.html.erb

<%= form_for @post do |f| %>
<%= f.label :body %>
<%= f.text_field :body, size:140, required:true %>
<%= f.submit "送信" %>
<% end %>
<%= link_to "投稿一覧", posts_path %>

“`
`required:true`は必須回答という意味です!
“`ruby:posts_controller.rb
class PostsController < ApplicationController # 省略 def new @post = Post.new end def create

元記事を表示

【Ruby】二項係数(nCr)の素数modを求めるコード

# 結論
“`Ruby:Ruby
# r<=0の挙動には注意 def nCrMod(n, r, mod) numerator = ((n - r + 1)..n).inject { |result, item| result * item % mod } # 分子 denominator = (1..r).inject { |result, item| result * item % mod } # 分母 puts numerator * (denominator.pow((mod - 2), mod)) end ``` 急ぐ方が多いと思うので始めに持ってきました。 このコードに至る経緯や解説は下に書いていきます。 # はじめに はじめまして、糸井と申します。 2022年4月に友人と競プロを始めてハマっています! 言語はRubyです。競プロで高みを目指すということも目標ですが、Rubyの経験を積むためにC++ではなくRubyを使っています。(競プロで高みを目指すだけなら、間違いなくC++を覚えた方がいいですね) 今回はAtCoderでたまに見るnCrの求め方と、それの

元記事を表示

【モンキーパッチ】管理画面生成gemのAdministrateで、NameError uninitialized constant

問題

Administrate gem
`0.16.0`

コントローラー
`app/controllers/admin/students/users_controller.rb`

モデル
`app/models/students/user.rb`

“`
NameError: uninitialized constant Student::User
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in const_get
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in block in constantize
File “/app/vendor/bundle/ruby/2.6.0/gems/ac

元記事を表示

Ruby の例外の伝播

いつも忘れるので。

“`ruby
def method1
method2
rescue => e
p “rescued in method1 #{e.message}”
end

def method2
if false
p ‘success’
else
raise “raised in method2”
end
end

method1
# => “rescued in method1 raised in method2”
“`

元記事を表示

フルスタックエンジニアへの道 part 2 ~Rails 7 × Dockerの環境構築 2

### 前回: 個人開発をやる目的とか、何をするかなどはこちらから

[https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb](https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb)

### 今回のゴール: Docker上に起動したMySQLとRailsを接続し、rails sする。

# dockerまわりの設定

Dockerfile: 最後にこれを足す

“`bash
$ CMD [“mysqld”] # mysqlを起動
“`

docker-compose.yml

“`bash
db-sloth:
image: mysql:5.7
platform: linux/x86_64 # M1 Macだと動かないのでplatformを指定
volumes:
– ./db/development/tools:/docker-entrypoint-initdb.d # 初回データ実行
– ./db/devel

元記事を表示

SlimとSassの静的サイトジェネレーター、RTramを作ったよ

RTram(あーるとらむ)はLPなどの静的なWebページ作成で、Ruby on Railsのエンジニアに馴染み深いSlimとSassを使いやすくするためのツールです。

https://github.com/rinkei/rtram

Rubyの構文とシンプルな記法でHTMLを表現できるSlimと、CSSをメンテナンスしやすく書けるSassを使って、高速にWebページを作成することができます。インストールは次の通りです。

“`
$ gem install rtram
“`

RTramはSlimとSassをHTMLとCSSに変換しながらlocalhostでホスティングするサーバーを提供します。
RTramのバージョン1.0.0ではプロジェクトディレクトリを作るコマンドとサーバーを起動するコマンドだけがあります。
プロジェクトディレクトリは次のような構成です。

– `slim`: 変換の対象となる.slimファイルを置くディレクトリ
– `sass`: 変換の対象となる.scss、.sassファイルを置くディレクトリ
– `output`: Slimから変換されたHTMLが出力さ

元記事を表示

OTHERカテゴリの最新記事