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

Ruby関連のことを調べてみた2020年01月24日
目次

[Ruby] Array#find_index の複数の index を返すバージョンがほしい

# バージョン情報

“`
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin18]
“`

# やりたいこと

[Array#find_index](https://docs.ruby-lang.org/ja/latest/method/Array/i/find_index.html) は引数に一致する最初の要素のインデックスを返す。

“`rb
%w(? ? ? ? ?).find_index(‘?’) #=> 2
“`

でも一致するすべてのインデックスを返してほしいな。

“`rb
%w(? ? ? ? ?).some_method(‘?’) #=> [2, 4]
“`

# 方法

“`rb
module ArrayExtension
refine Array do
def find_indexes(val)
filter_map.with_index { |element, i| i if element == val }

# Rub

元記事を表示

#Ruby で Shift JIS と UTF-8 を相互変換できないので Windows-31j(CP932) でエンコード・デコードする ( Encoding::UndefinedConversionError )

# 現象

特殊文字 ㈱ が相互変換できない

“`rb

‘㈱’.encode(“Shift_jis”).encode(‘UTF-8’)
# Encoding::UndefinedConversionError: U+3231 from UTF-8 to Shift_JIS

‘㈱’.encode(“cp932”).encode(‘UTF-8’)
# => “㈱”
“`

# Ref

RubyでShift JISやCP932などのCSVをUTF-8に変換して読み込む – Qiita
https://qiita.com/daichi87gi/items/9097adfd47d9725097f1

RubyでShift JISやCP932などのCSVをUTF-8に変換して読み込む – Qiita
https://qiita.com/daichi87gi/items/9097adfd47d9725097f1

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2958

元記事を表示

小規模チームが簡単に管理できるテスト管理アプリを個人開発しました

![report.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459044/ad2f2c59-ef96-81b3-c722-2044d53484cf.png)

開発者とテスト担当者がわかれていないようなチームがテスト仕様書を作成できて、共有、レポート作成と
簡単に管理できるツールが作れないかと考え[TESTBASE(https://www.test-base.tech/)](https://www.test-base.tech/)というテスト管理ツールを個人開発しました。
現状はベータ版としてパイロット運用をして、本番稼働に移行していけたらなと考えています。

# 対象読者
次のような方の参考になるような内容をまとめています。

– 個人開発を始めようとしている方
– テスト管理ツールを探している方

# なぜ作ろうとおもったか

理由は次の3点があります。

– 無料で使えるテスト管理ツールがなかった
– 海外製品はIEEEなどの基準に準拠しているのか日本のExcelっぽいGUIではなかっ

元記事を表示

Ruby初級(計算、each文、ハッシュ、メソッド、既存メソッド、条件分岐、繰り返し文、おみくじ)をざっと書いてみた。

#最初の頃に学んだRubyの基礎的な部分を書いてみました。
投稿慣れするために簡単に書いてみました。説明不足すみません。

#環境構築で悩まれている方はAWScloud9
最初に私も環境設定ですごく進みが悪く時間を浪費しました。
最初はなんでもいいのでとりあえず動かしてみましょう。

###以下のコードは作ったfileにコピペした後に、ターミナルを開いて $ ruby qiita.rbとすると結果が表示されます。
– ファイル名はご自身の好きな名前で大丈夫です。
– 最後の.rbがRubyのファイルという意味になります。
– ターミナル開いたらcdコマンドでご自身で作った作業しているfileへ移動後に$ ruby ファイル名.rb しないとエラーになります
– #はコメントアウトなので一緒にコピペして大丈夫です。

# いろんな計算
小数点とかいじってみてください。

“`ruby:qiita.rb
#計算
puts 1+1
puts 2-1
puts 3*2
puts 10/3
puts 10.0/3
puts 10%3
“`
# each文
– scoresに数字を入れ、su

元記事を表示

ミニQ & Aサービスの開発

Udemyの教材でミニQ&Aサービスの開発について学んだので、備忘録として記録します。
教材:[https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/)

## Rubyのバージョン管理

今回はバージョン2.5.1で進めました。

“`terminal:ターミナル
$ rvm -v #rvmのバージョンを調べる
$ rvm 1.29.8 (1.29.8) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

$ rvm list
=* ruby-2.5.1 [ x86_64 ]
ruby-2.6.3 [ x86_64 ]

# => – current
# =* – current && default
# * – default

$ rvm install 2.5.1 #バージョン

元記事を表示

(Ruby2.7.0 )Ruby on Railsをうまくインストール出来ないとき(Windows)

#WindowsでRuby2.7.0を使っているとRailsのインスールが出来ない(2020.1.24)
Progateが一通り終わって、**Ruby on Railsの環境構築**をしようとしたらエラーが表示されて**インストールがうまくいかない。**

それはなぜか。

**Ruby2.7.0にnokogiriのバージョンが追いついていないから!!!**

エラーメッセージ(コピペし忘れた)を読んでみると、
**「お前のバージョンだとRuby2.3までしか対応してねーよ。nokogiriのバージョンを1.8.5にあげやがれ**(確か1.8.5。細かい数字はうろおぼえ)。」
みたいなことが書かれていた。

ということでまずnokogiriのバージョンを上げた。

“`tarminal
gem install nokogiri -V ‘1.8.5’
“`
よし、これでRailsをインストールできる!!!!

“`tarminal
gem install rails
“`

…またエラー出た。

今度は
**「お前のnokogiriのバージョンだとRuby2.6までしか対

元記事を表示

【解決策】formにカラムが設定されない!?

Webアプリを開発していて、routesとcontroller、viewを何度も見直したのにformを検証で見てみると何故かカラムが設定されない時に以下の方法で解決しました。

#before
= form_with model: @message, url: job_messages_path(@job), local: true do |f|
= f.text_field :text
#after
= form_with model: @message, url: job_messages_path(@job), local: true do |f|
= f.text_field :text, name: “message[text]”

下の行に、name:”テーブル名[カラム名]”を書き足せばカラムが設定され、値を入れることができました!!

元記事を表示

Active Storage + S3を使うときに気をつけること

__備忘録なので無視してください__

“file_field“で写真をアップする時に“direct_upload“を設定しないと“No route matches“になる時がある。

“`slim
= f.file_field :image, direct_upload: true
“`

元記事を表示

Rspecと Factoryの使い方

#Rspecとは?
**Rspec**とは自動テストをしてくれる言語。になります。
UIテストをいちいちせずとも、
「ページの遷移」、「モデルバリデーション」、「if分の条件分岐による処理の確認」…
などなど、人間がやるには面倒なことを自動でやってくれるのが**Rspec**になります!

#準備
今回は比較的簡単な、
「コントローラーによる画面遷移確認テスト」
のコードを書いていこうと思います

また、ログイン後の処理定義をするコードを書きますが、そのログイン処理を**Devise**を使ってやるものとします

##導入するGemインストール
今回使うのは**Rspec**と**Factory_bot**というGemを使います
内容については後ほど解説しますので、まずはインストールしましょう!!

“`ruby:Gemfile
group :development, :test do
gem “rspec-rails”
gem “factory_bot_rails”
end
“`

##rspecを設定・書くためのファイルを作成

“`
$ bundle exec

元記事を表示

【Ruby】mapメソッドのつかいかた(+別メソッドとの組み合わせの例など)

自己整理&備忘録です。

#mapメソッドとは
mapメソッドとは、**「配列の要素それぞれに対して一定の処理を行って、新しい配列をつくるメソッド」**とされる。

 
基本的な型

“`
配列.map { |変数| 実行させたい処理 }
“`

名称は異なるが`collectメソッド`もmapと同じ動きをする。

#つかいかた(例)

##1. 数式

“`ruby:sample_1.rb

x = [0, 100, 500]
y = x.map { |x| x * 2 }
p y

#=> [0, 200, 1000]
“`

##2.mapの要素にメソッドを与える(よく見る形)

基本の型

“`
オブジェクト名.map(&:メソッド名)
“`

“`rb

sports = [“BASEBALL”, “SOCCER”]
p sports.map(&:downcase)

#=> [“baseball”, “soccer”]
“`

#mapとmap!の違い
`map`  → 元の値に対して影響を与えない
`map!` → 元の値を書き換える

`

元記事を表示

Railsチュートリアル 第4章

##Railsコンソールの設定
Railsコンソールはirb(IRB:Interactive RuBy)を拡張して作られているため、Rubyの機能を全て使うことができる。

“`
$ nano ~/.irbrc
“`

下記の設定を書くと、irbのプロンプトが簡潔な表示に置き換わる。

“`
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:AUTO_INDENT_MODE] = false
“`

##後続ifとunless
if:条件式が”真”のときに実行される

“`
puts “x is not empty” if !x.empty?
“`

unless:条件式が”偽”のときに実行される

“`
>> string = “foobar”
>> puts “The string ‘#{string}’ is nonempty.” unless string.empty?
The string ‘foobar’ is nonempty.
=> nil
“`

##メソッド
###mapメソッド
配列の要素の数だけブロック内の処理

元記事を表示

Alpineベースのimageにruby2.2.3を入れる

本当はalpine-rubyをベースにするべきなんだろうけど諸事情でJava系のベースにする必要があったので、rbenvを自力で入れて構築することにしました。

出来上がったDockerfileはこちら。

“`Dockerfile
FROM openjdk:8-jdk-alpine

RUN apk update && \
apk upgrade && \
apk add –update –no-cache \
bash \
vim \
curl \
tzdata

RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
apk del tzdata

RUN echo “http://dl-cdn.alpinelinux.org/alpine/v3.8/main” >> /etc/apk/repositories
RUN apk update && \
apk upgrade && \
apk add –update –no-cache —

元記事を表示

【rails】ユーザー 登録時にnameカラムに自動的に@を付ける方法

#はじめに
初学者がポートフォリオ作成でハマったことをメモします。
TiwtterのアカウントIDのように特定のカラムの最初に@を付ける方法です。ホートフォリオ作成時にユーザーの名前やアカウントIDの最初に@を付けたいという方は多いと思います。
初歩的な内容すぎて調べてもそのような記事がすぐ見つからなかったので残しておきます。

##結論
`before_save`をmodelに設定する。
##コードと説明
formから送られてきた値を保存する前に加工する。
before_saveは、paramsをDBに保存する直前に指定したプログラム(今回の例では、:change_account_name)を実施するコールバック関数です。
before_saveを設定すると、createとupdateのどちらも場合にも、適用されます。

コールバック処理について
http://www.techscore.com/blog/2012/12/25/rails%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E3%81%BE%E

元記事を表示

【Ruby】ヒアドキュメントの初歩的なつかいかた

簡単に備忘録。

# 1. ヒアドキュメントとは
ヒアドキュメントは**「文字列をシェルスクリプトやプログラミングに埋め込むためのもの」**
`””`無しや改行&空白なども書いた通りに適用できる(長い文などに有効)。

#2. 使い方

通常

“`ruby

puts “りんご”
puts “バナナ”
puts “メロン”
puts “いちご”

#=>
りんご
バナナ
メロン
いちご
“`

ヒアドキュメントの場合

“`ruby

puts <<~EOS りんご バナナ メロン いちご EOS #=>
りんご
バナナ
メロン
いちご
“`

#参考
[【3分でわかる】Rubyでヒアドキュメント](https://www.sejuku.net/blog/14283)
[ヒアドキュメントとは・基本の使い方(ruby)](https://qiita.com/shukan0728/items/b830e97f563e63e46e91)

元記事を表示

#Ruby / nested Array elements / map and delete / Broken modified original array / So use dup ( deep copy )

“`rb
# GOOD
# dup element in map
arr = [[:A, :B], [:C, :D]]; changed_arr = arr.map { |a| x = a.dup; x.delete_at(-1); x }; p changed_arr; p arr
# [[:A], [:C]]
# [[:A, :B], [:C, :D]]

# BAD
# map and delete
arr = [[:A, :B], [:C, :D]]; changed_arr = arr.map { |a| a.delete_at(-1); a }; p changed_arr; p arr
# [[:A], [:C]]
# [[:A], [:C]]

# BAD
# dup array and map and delete
arr = [[:A, :B], [:C, :D]]; dupped_arr = arr.dup; changed_arr = dupped_arr.map { |a| a.delete_at(-1); a }; p changed_arr; p ar

元記事を表示

#Ruby で配列の添字・順序を文字列から探す ( find_index )

“`rb
[“A”,”B”,”C”,”C”,”D”].find_index(“A”)
# => 0

[“A”,”B”,”C”,”C”,”D”].find_index(“B”)
# => 1

# 複数見つかる場合も最初のものが返る
[“A”,”B”,”C”,”C”,”D”].find_index(“C”)
# => 2

[“A”,”B”,”C”,”C”,”D”].find_index(“D”)
# => 4

[“A”,”B”,”C”,”C”,”D”].find_index(“E”)
# => nil
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2956

元記事を表示

Railsチュートリアル 第3章

この章では、テスト駆動開発について学習。

#テスト
Railsのテストには、コントローラーテスト、モデルテスト、統合テストの3種類ある。
ここでは、コントローラーテストについてメモ。

テストの例を2つほど

“`
test “should get home” do
 get static_pages_home_url  ⇨GETリクエストをhomeアクションに対して発行
 assert_response :success   ⇨リクエストに対するレスポンスは”成功”になるはず
end
“`

“`
test “should get home” do
 get static_pages_home_url
 assert_response :success
 assert_select “title”, “Home | Ruby on Rails Tutorial Sample App” ⇨titleタグ内に「Home | Ruby on Rails Tutorial Sample App」と言う文字列があるはず
end
“`

###setupメソッド
書くテストが実行される

元記事を表示

RubyでLeetCodeを解いてみた Palindrome Number

https://leetcode.com/problems/palindrome-number/

>Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

“`ruby
# @param {Integer} x
# @return {Boolean}
def is_palindrome(x)
return false if x.negative?
if x.positive?
arr = x.to_s.chars
size = arr.size
arr.each_with_index do |ele, idx|
return false if ele != arr[size – idx – 1]
end
return true
end
return true if x.zero?
end
“`

>Coud you solve it w

元記事を表示

rakeタスクに引数を渡したいとき

rakeタスクで引数を渡したい!
意外とまとまった記事がなかったので備忘。

## タスク名とともに引数を書く
“`ruby
task :task_name, [‘filter’] => :environment do |_task, args|
p args
p args[:filter]
~
“`
`filter` の部分は任意の文字でOK

## タスク実行方法
command: `rake “task_name[arg]”`

`arg` 部分に渡したい引数を書く。この場合だと “arg” が渡される。
タスク全体を “” で囲まないと、引数までタスクとして認識されない。

## 実行結果
“`
=> #
“arg”
“`

元記事を表示

【Rails】kaminari&ransackでページネーションと検索機能を実装

【ページネーション】
1ページあたり20件に設定。
スタイルはBootstrap4で実装します。

【検索機能】
投稿一覧から検索とブックマーク済み投稿一覧から検索の2パターン実装していきます。
検索条件はタイトルか本文の部分一致とします。

【事前準備】
・ブックマーク機能を実装しておいてください。
参考資料:[【Rails】ブックマーク(お気に入り)機能](https://qiita.com/hiro266/items/8a0374155cd18adbd7cf)
・bootstrap4を使用できるように設定しておいてください。
参考資料:[BootstrapをRailsに導入してみよう!徹底解説!](https://tech-boost.jp/magazine/Programming-languages/ruby/1073142)

# 環境
`Rails 5.2.3`
`mysql 5.7.28`
`gem kaminari`
`gem ransack`

# 実装
それでは実装していきます。

## gemの追加
`gem kaminari`
`gem ransack`

G

元記事を表示

OTHERカテゴリの最新記事