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

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

binding.pryが止まらない!

railsのデバッグのために `binding.pry` を使ったが、ループの中に入れてしまったので `exit` をしてもずっと止まらない!
こんな時に使えるコマンドがこちらです!↓

“`terminal
$ exit!
$ !!!
“`

上記のどちらかで止まります!
試してみてください^^

元記事を表示

Ruby: Splat Operator と Double Splat Operator

## はじめに

Ruby には `Splat Operator` と `Double Splat Operator` の2つの文法があることを知りました。以前より何回か見たことはあったが、ちゃんと理解できていなあった点もあるので、改めてその違いと特徴をまとめてみます。

## 前提
– Ruby 2.7.5

## Splat Operator

### どんなもの?

メソッドの仮引数にある `*` を使用して定義した引数のことです。

“`ruby
def method(*args)

end
“`

要は可変長引数で配列として受けることができます。

“`ruby
def method(*args)
args
end

p method(‘Ruby’, name: ‘yamada’) # => [“Ruby”, {:name=>”yamada”}]
“`

配列として受けることができるので、引数には文字列やキーワード引数などが渡すことができます。

## Double Splat Operator

### どんなもの?

メソッドの仮引数にある `**`

元記事を表示

Dirクラスを解説

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/5d1866cb-e2ee-9696-2a44-6e410ffa3447.png)

今回の記事では、詳しい説明は省略させていただきます。[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#singleton_method)を読んでみてください。

結論からいうと、正解は、Dir.pwd以外の選択肢すべてです。
1つ1つの選択肢を調べましたので、ぜひ参考にしてください!

##そもそもDirクラスとは
めちゃザックリいうと、ディレクトリを色々操作できる、というクラスです。
今回問題で使われているpwdメソッド、globメソッドを例に紹介していきます。

###pwdメソッド
現在のディレクトリを出力するメソッドなんですね。
pwd(print w

元記事を表示

【N+1問題】ループ処理の中でクエリを実行しない!

##N+1問題

ループ処理の中でクエリを実行しない!
大量のクエリが発行されるのでめちゃくちゃ重くなるので、
ループを実行する前にあらかじめデータ取得しておく。

####良くない例

“`ruby
books = Book.all

book_names = []
books.each do |book|
book_names << BookSynopsis.find_by(book_id: book.id).name end ``` ####良い例 ```ruby book_synopsis = Book.includes(:book_synopsis) book_names = [] book_synopsis.each do |book_synopsis| book_names << book_synopsis.name end ``` ##参考 https://qiita.com/shizen-shin/items/fffdf57feda979efb5d9

元記事を表示

任意のタイムゾーンを持ったActiveSupport::TimeWithZoneオブジェクトを生成する

# お題

“`ruby
Time.zone_default
# => #, @utc_offset=nil>
Time.zone
# => #, @utc_offset=nil>
Time.zone.now.zone
# => “UTC”
“`

(戻すのが面倒だったり忘れたりするから)`Time.zone_default` や `Time.zone` は変更せずに、なんか好きな `ActiveSupport::TimeZone` オブジェクトをしょった `ActiveSupport::TimeWithZone` オブジェクトがほしい。

*activesupport-7.0.1/lib/activ

元記事を表示

[rails]いいねが削除できない? →ネスト時には引数が2つ必要

#はじめに
この記事はプログラミング学習の備忘録です。
今回はrailsでいいね機能の削除ができず、時間を使ってしまったのでまとめます。

今回分かったこととしては、**「ネストしている場合は引数を2つ指定する必要がある」**ということです。

#エラー内容
以下今回の記事の前提です。
・散歩習慣アプリを作っている
・投稿機能には、「walks」というモデルを使っている。
・いいね機能には、「likes」というモデルを使っている。

いいねを削除するために以下のように実装しました。

“`index.html.erb
<%= link_to "いいねを解除" ,walk_like_path(walk),method: :delete %>
“`

walk_like_path(walk)で投稿に紐づくいいねを指定、
method: :deleteも付けているので問題なさそうです。
しかし表示してみると、

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

元記事を表示

[py2rb] multiprocessing

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# multiprocessing (Python)
“`python
import multiprocessing as mp

try:
_NPROC = mp.cpu_count()
except NotImplementedError:
_NPROC = 4
“`
https://docs.python.org/ja/3.7/library/multiprocessing.html

`並列処理`を移植するって、完全に力不足。
# どうする (Ruby)
“`ruby
require ‘etc’
p Etc.nprocessors #=> 4
“`
いや、cpuのコア数を数えるくらいならできますけど。

https://docs.ruby-lang.org/ja/latest/method/Etc/m/nprocessors.html
# メモ
+ Python の multiprocessing を学習した
+ 百里を行く者は九十里を半ばとす

元記事を表示

[py2rb] !r

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# !r (Python)
“`python
>>> name = “Fred”
>>> f”He said his name is {name!r}.”
“He said his name is ‘Fred’.”
>>> f”He said his name is {repr(name)}.” # repr() is equivalent to !r
“He said his name is ‘Fred’.”
“`
https://docs.python.org/ja/3/reference/lexical_analysis.html

> ‘!r’ は repr() を呼び出します。

# どうする (Ruby)
“`ruby
name = “Fred”
puts “He said his name is #{__repr__(name)}.”
# or
puts “He said his name is #{name.inspect}.”
“`
`!r`を検索するのに時間がか

元記事を表示

Rails7をちょっと試す(turbo_frame_tag あるいは、さらばJavascript編)

## はじめに

Rails 7.0.0 には、 [Turbo](https://github.com/hotwired/turbo-rails) が組み込まれています。
今回はその中で、 `turbo_frame_tag` を試してみたいと思います。
`turbo_frame_tag` を使って、詳細画面を表示したまま編集できるようにするSPAっぽいことをやってみます。

`turbo_frame_tag` を使うと、Javascript を1行も書くことなく SPA を書けるんじゃないかと妄想しています。

以下のバージョンで確認しました。

– Ruby 3.0.2
– Rails 7.0.0
– npm 8.3.0
– yarn 1.22.17

## Rails プロジェクトを作る

新しくRailsプロジェクトを作ります。このとき `
(データベースオプションを指定しているのに深い意味はありません。)

“`shell
mkdir rails_sandbox
cd rails_sandbox
rails new . –database=postgresql
“`

#

元記事を表示

[py2rb] 予約語

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 予約語 (Python)
“`python
import keyword
print(keyword.kwlist)

[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’,
‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’,
‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’,
‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’,
‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’,
‘try’, ‘while’, ‘with’, ‘yield’]
“`
# 予約語 (Ruby)
“`ruby
BEGIN class ensure nil self when
END def

元記事を表示

S3 Object Lambdaで大量のテキストを並列加工

## はじめに
– S3 Object Lambdaを使って、大量のテキスト文を並列で形態素解析します。
– 形態素解析については別で[記事](https://qiita.com/sho-jp/items/50243956373f21b1e138)を書いています

## S3 Object Lambdaとは
> S3 Object Lambda を使用すると、クライアントアプリケーションによって S3 からオブジェクトを取得するときに、Lambda 関数を使用してデータを処理および変換できます。

![s3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703256/53ad0823-d289-b26b-e8cc-185276169999.png)

[参照](https://aws.amazon.com/jp/blogs/news/translating-content-dynamically-by-using-amazon-s3-object-lambda)

S3にあるオブジェクトにGetアクセス

元記事を表示

[py2rb] キーワード引数と可変長引数の組み合わせ

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 引数 (Python)
“`python
def func1(a, b, *args):
print(a, b, args)

def func2(a, b=None, *args):
print(a, b, args)

def func3(a=None, b=None, *args):
print(a, b, args)

func1(‘A’)
func2(‘A’)
func3(b=’A’)

func1(‘A’, ‘B’)
func2(‘A’, ‘B’)
func3(b=’A’, a=’B’)

func1(‘A’, ‘B’, ‘C’, ‘D’)
func2(‘A’, ‘B’, ‘C’, ‘D’)
func3(‘B’, ‘A’, ‘C’, ‘D’)

#output
TypeError: func1() missing 1 required positional argument: ‘b’
A None ()
None A ()
A B ()
A

元記事を表示

多重代入についてまとめてみました

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/042e8990-4236-4e6f-1a92-2c972420c4a8.png)

##多重代入

###基本的な使い方
“`
a, b, c = 1, 2, 3
a
# => 1
b
# => 2
c
# => 3
“`
##右辺の要素が左辺の要素よりも多い場合は無視される
“`
a, b = 1, 2, 3
a
# => 1
b
# => 2

#この場合3は無視される
“`
##右辺の要素が左辺の要素よりも小さい場合は無視される
“`
a, b, c = 1, 2
a
# => 1
b
# => 2
c
# => nil

該当する要素がない場合は、nilになる
“`
##残った要素は、配列として格納される
“`
a, *b = 1, 2, 3
a
# => 1
b
# => [2, 3]

・残りの要素が

元記事を表示

Ruby入門 Ruby3導入方法 for mac (2022) 環境構築

新しいMacbookにRubyを導入する工程をまとめます。

動作環境
MacBook    (Retina, 12-inch, 2017)
MacOS     Monterey 12.1
Processor    1.4 GHz Dual-Core Intel Core i7
Memory     16 GB 1867 MHz LPDDR3

まずは現在のRubyのバージョンの確認

ターミナルで

“`
ruby -v
“`

と打ち込むと

“`
ruby 2.6.8
“`

だと判明。

まずは下準備として
下記URLからHomebrewをインストール

“`
https://brew.sh/index_ja.html
“`

インストールの文字のしたのスクリプトをコピーしてターミナルにペーストする。
何度かパスワードを入力を求められるのでMacのパスワードを入力する。

環境にもよるだろうがダウンロード、インストールに筆者はかなり時間がかかった。

無事インストールが終わった後
 
下記コマンドを実行してrbenvとruby-build をインストールする。

元記事を表示

RubyのFileの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/89d8d195-25a6-4176-5803-55e9cfe53d7a.png)
rubyのsilverを勉強していく中で、この問題が正解できなかったので、それを解説する意味でもこの記事を書かせていただきます。

この問題を正解するうえで、抑えておくべきポイントは、

1. w :書き込みモード。
2. w+ :読み書きモード。既にファイルが存在する場合は、空になります。新規作成もされます。
3. r :読み込みモード。
4. r+ :読み書きモード。ファイルの読み込みと書き込みの位置は文の先頭から。
5. a :追記モード。既存のファイルの文末に入力内容を追記する。
6. a+ :読み書きモード。ファイルの読み込み位置は先頭に、書き込み位置は常に末尾になる

1個ずつ解説していきますね

##w
wはwriteのwと覚えれば役割がはっきりしますね。
既存のファイルに、書き込みをしていく機能なんですね。

##r
readの

元記事を表示

railsでカレンダー機能を実装する方法

#はじめに
 この記事はプログラミング学習の備忘録です。
 現在習慣化アプリを実装中です。その中でsimple_calenderを使って簡単にカレンダー機能を実装する方法について学んだので紹介します。

#実装の目標
①以下のようなカレンダーを導入する
②タスクを記録したら、カレンダーが緑色になるようにする
[![Image from Gyazo](https://i.gyazo.com/99f90661b07a347092af44ad610d1197.png)](https://gyazo.com/99f90661b07a347092af44ad610d1197)

#gemfileを導入 
・gemfileに以下の記述をします。

“`
 gem ‘simple_calendar’, ‘~> 2.0’
“`

その後忘れずに、bundleinstallしましょう。

これでgemfileの導入は完了です。

#モデルの設定をする
 以下のようにモデルを設定します。今回はテストなのでシンプルな形で作ります。
マイグレーションファイルに以下のように記述して、「rails db:m

元記事を表示

【Rails】ページ遷移せずにいいねをしたい/取り消したい

みなさん、こんにちは!
筆者は大学生限定のプログラミングスクール「GeekSalon」でメンターをしています!
興味のある方や話だけでも聞いてみてい方はぜひのぞいてみてください?

https://geek-salon.com/?utm_source=Direct&utm_medium=attract&utm_campaign=3Q&utm_content=Fukuoka_B1_3Q

さっそく今回の本題に入っていきます!
今回は投稿に対するいいねを、ページ遷移せずともできる/取り消せるようにしていきたいと思います。

なお、いいね機能は実装済みという前提で話を進めていくため、いいね機能をまだ実装していない人は先にそちらの実装をお願いします。

また今回の実装では部分テンプレートを用いています。部分テンプレートについての理解が怪しい方は、[参考となる記事](https://qiita.com/okamoto_ryo/items/026b43e965a1180113ba)を載せておきますので、そちらも参照してください!

##実装環境
ruby 2.7.4p191 (2021-07-07

元記事を表示

【Ruby】配列に格納された数値の合計値を算出

※初心者向け
※アウトプット練習の為
※学習の復習

開発環境
rails 6.0.4.4
ruby 2.6.5

**概要**
配列に格納された3つの数値の合計を算出するプログラムを実装します。

##問題内容
以下の要件を満たすlone_sumメソッドを実装しましょう。

・配列に格納された3つの数値の合計を出力する
・ただし、同じ数値が2つ以上含まれている場合、その数値は合計する要素に含めない

**雛形**

“`ruby
def lone_sum(ary)
# 処理を記述
end

# 呼び出し例
lone_sum([1, 2, 3])
“`

出力例
lone_sum([1, 2, 3]) → 6
lone_sum([3, 2, 3]) → 2
lone_sum([3, 3, 3]) → 0

##解答

“`ruby
def lone_sum(ary)
# 配列から、重複しない要素のみ取り出す
uniq_nums = []
ary.each do |num|
count = 0
ary.each do |i|
if nu

元記事を表示

[Ruby] URLエンコード済かどうかの確認をして二重エンコードを避ける

URLをエンコードした状態で保存する場合、`URI.encode`のような処理でエンコードすることが可能ですが、もし入力されたURLがエンコード済の場合、二重エンコードとなってしまい正しいURLではなくなってしまいます。この記事ではエンコード済かどうかの確認方法をまとめました。

### 結論

URLをデコードした文字列が元の文字列と一致する場合エンコードされていない状態、一致しない場合はエンコード済という判断が可能です。

“`ruby
Addressable::URI.unescape(url) != url ? Addressable::URI.encode(url) : url
“`

### 動作確認

Ruby 2.7.0から`URI.encode`がobsoleteになっているため、`Addressable`を使用しようと思います。

https://docs.knapsackpro.com/2020/uri-escape-is-obsolete-percent-encoding-your-query-string

https://github.com/spork

元記事を表示

Ruby3.1でherokuにデプロイしたらクラッシュした

## 起きたこと
herokuにデプロイしたらクラッシュしました。

“`
2022-01-24T00:27:57.846452+00:00 app[web.1]: => Run `bin/rails server –help` for more startup options
2022-01-24T00:27:58.231038+00:00 app[web.1]: Exiting
2022-01-24T00:27:58.236805+00:00 app[web.1]: /app/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require’: cannot load such file — net/smtp (LoadError)

中略

2022-01-24T00:27:58.385873+00:00 heroku[web.1]: Process exited with status 1
2022-01-2

元記事を表示

OTHERカテゴリの最新記事