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

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

rubyのmap関数ではreturnではなくnextをつかう

rubyで以下の様なコードを実行しようとして失敗した話

“`ruby
obj = (1..5).map do |i|
return ‘this is 3’ if i == 3
#~ 複雑な処理 ~
i
end
puts obj # => nil
“`
なんとなく上記のようなコードを実行したらmapの結果は“`[1, 2, ‘this is 3’, 4, 5]“`の配列がかえってくると思っていたけど実際にはnilが返ってきたので、慌ててrubyのドキュメントを読んでたら、nextを使う必要があるみたい。
nextも引数を取れるので、条件式が正(true)の時に返したいデータをnextの引数に渡す様にしてあげる。

つまり以下の様にするのが正しい。

“`ruby
obj = (1..5).map do |i|
next ‘this is 3’ if i == 3
#~ 複雑な処理 ~
i
end
puts obj # => [1, 2, ‘this is 3’, 4, 5]
“`

あやうくバグを仕込むことになった…

ちなみにJavaScrip

元記事を表示

LeetCode – 21. Merge Two Sorted Lists

# ListNodeをつくる

配列からListNodeのテストデータを作る

“`ruby

# Definition for singly-linked list.
class ListNode
attr_accessor :val, :next
def initialize(val)
@val = val
@next = nil
end
end

def create_list_node(array)
array_of_list_nodes = array.map{|n|
ListNode.new(n)
}

lns = ListNode.new(0)
buf = lns
array_of_list_nodes.each{|ln|
lns.next = ln
lns = lns.next
#p lns
#p buf
}
buf.next
end

ln1 = create_list_node([1,2,4])
ln2 = create_list_node([1,3,4])

元記事を表示

【jQuery】RailsでValidation Pluginを使った動的なバリデーションチェックの実装 〜詳細実装/Bootstrap編〜

# はじめに

[前回の記事](https://qiita.com/tiphp452/items/2ac12f7d95a230ef9d02)では導入編をまとめましたので本記事では詳細実装編をまとめます。後半では以下の場合についてもまとめています。

+ Bootstrapを使用している場合
+ deviseを使用している場合
+ 正規表現チェックメソッドのサンプル一覧

# 開発環境
Ruby 2.5.1
Rails 5.0.7.2
jQuery 3.4.1
jQuery Validation Plugin 1.19.1
Bootstrap 4.3.1

# 実装手順

入力フォームを実装済み、プラグインを導入済みであることを前提としています。

## パスワードと確認用パスワードのバリデーションチェック

### 完成イメージ
[![Image from Gyazo](https://i.gyazo.com/d36d27f39c5a2170c757e1d9867cbf61.gif)](https://gyazo.com/d36d27f39c5a2170c757e1d9867cbf61

元記事を表示

【Rails】 独自 Validation 作成方法(複数モデル適用)

# はじめに
バリデーションの作成方法はモデル内にprivateメソッドを作って、そのメソッドをvalidateの引数に指定する方法が一般的かと思います。
今回は、複数のモデルで同じバリデーションを適用したいケースへの対応方法をまとめました。

# 独自バリデーション作成方法
## やること

開始日時カラムと終了日時カラムを持ったモデルの入力フォームに、
どちらのカラムも入力するか、どちらのカラムも入力しないバリデーションをかけたい。

### Concern

まずは、“`app/models/concerns“`の直下にバリデーション専用のクラスを作成する。
Concernsを使用することで、同じカラムを持った他のモデルにも適用することができ、さらに細かい継承関係を考えなくてもよくなります。

“`Ruby:app/models/concerns/work_datetime_validation.rb
class WorkDatetimeValidation < ActiveModel::Validator # record には、インスタンスが入る def va

元記事を表示

#Ruby / URI::DEFAULT_PARSER.make_regexp / RuboCop::Cop::Lint::UriRegexp

“`rb
# no arg
URI::DEFAULT_PARSER.make_regexp
# => /
# ([a-zA-Z][\-+.a-zA-Z\d]*): (?# 1: scheme)
# (?:
# ((?:[\-_.!~*'()a-zA-Z\d;?:@&=+$,]|%[a-fA-F\d]{2})(?:[\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*) (?# 2: opaque)
# |
# (?:(?:
# \/\/(?:
# (?:(?:((?:[\-_.!~*'()a-zA-Z\d;:&=+$,]|%[a-fA-F\d]{2})*)@)? (?# 3: userinfo)
# (?:((?:(?:[a-zA-Z0-9\-.

元記事を表示

Rubyではメソッドにreturnの記述要らない?

Railsで開発している際に既存コードにreturnが書かれていなかったり、returnを書いてrubocopに指摘されたりしたので調べました。
rubyでは不要であればreturnは書かない方針のようです。

## RubyではReturnの記述は不要
Rubyのメソッドでは、**最後に評価された値が返る**という仕様になっています。
例えば以下のような文字列を返すメソッドがあります。

“`ruby
def hoge(is_hoge)
if is_hoge
“hoge”
else
“fuga”
end
end
“`

最後に評価された値が返るので、それぞれ以下を返します。

“`ruby
hoge(true) # “hoge”

hoge(false) # “fuga”
“`

## 後置ifでは注意が必要

“`ruby
def hoge(is_hoge)
“fuga”
“hoge” if is_hoge
end
“`
“` ruby
hoge(true) # “hoge”

hoge(false) # nil
“`
なん

元記事を表示

CSS,SCSSで画像を背景にする方法

SCSSで作成

.クラス名 {
background: url(/フォルダ名/ファイル名) no-repeat top / 横px 縦px;
height: 要素の高さ;
wight: 要素の幅;
}

backgroundで背景にする

urlで画像を指定する

no-repeatで画像が何枚も投稿されるのを防ぐ
(これがないと勝手に何枚も表示される)

topで上に詰める?

画像の縦横を指定してあげる

間違いがあれば指摘をお願いします。

元記事を表示

Action Cableの設定でつまずいたこと

##行っていること
以下の記事や動画を参考にチャット機能を作成しています。
[Rails 5 + ActionCableで作る!シンプルなチャットアプリ(DHH氏のデモ動画より)](https://qiita.com/jnchito/items/aec75fab42804287d71b)
[0から手を動かして作るRailsチャットアプリ【チュートリアル】](https://www.youtube.com/watch?v=WCsgcp5dg7M)

リアルタイムでのチャット機能を作成する際につまずいたことを、記録も兼ねて共有します。

##やりたいこと
自分(current_user)と他の人で表示方法を変える
スクリーンショット 2020-01-24 17.56.47.png

##チャンネルの作成
“`
$

元記事を表示

初学者によるプログラミングMemo #19 正規表現(基本編)

はじめに
今回は正規表現(基本編)のお話です
正規表現を初めに見たときは、”/\d+\/\/”みたいなのを見てなんだこれは、謎の記号の羅列やんと思ったものです
ですが、私もプログラミング学習を進めていくうちに、少しずつわかってくるようになったので、このタイミングで書きたいと思います
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです

#目次
– 正規表現の各パーツについて
– 正規表現でなんか取ってこよう

##正規表現の各パーツについて
まずは謎の記号の羅列が、各パーツに分解できるところから知りましょう(今回は解説含むので、理解できているものを紹介します)

“`.rb
[abc] #aかbかcのどれか1文字
[^abc] #a,b,c以外の1文字
[a-z] #a~zのうちのどれか1文字
[a-zA-Z] #a~zかA~Zのうちのどれか1文字
. #任意の1文字
\d #任意の数字
\w #任意(文字、数字、アンダースコアのうちの

元記事を表示

【Rails】掲示板に禁止ワードを設定する

掲示板にクローラー的なやつがリンクやスクリプトを書き込み始めたので、暫定的な対応をしました。

“`comments_controller.rb
def create
#以下の4行で対応
prohibited_words = [‘a href=’, ‘.include?(p) }`で検証したい文字列に禁止ワードが含まれているかをチェックしています。

p.s.
掲示板荒らし対策に詳し

元記事を表示

THIS BEHAVIOR MAY CHANGE IN A FUTURE VERSION OF CAPISTRANO. Please join the conversation here if this affects you. https://github.com/capistrano/capistrano/issues/1686のエラー解決例

#1.エラーの様子

まず、自動デプロイを設定し、実行コマンドを行いました。すると下記のようになりました。

“`ruby
Neverland:chat-space-kai kontatomoya$ bundle exec cap production deploy
#自動deployのコマンドを打ちました
#ここまでまでエラーなし(省略)

00:51 unicorn:start
unicorn is running…
unicorn restarting…
01 kill -s USR2 `cat /var/www/chat-space-kai/shared/tmp/pids/unicorn.pid`
✔ 01 ec2-user@13.112.68.204 0.609s
Skipping task `unicorn:restart’.
Capistrano tasks may only be invoked once. Since task `unicorn:restart’ was previously invoked, i

元記事を表示

Railsチュートリアル 第5章

#ヘルパーメソッド
###link_to
リンクを生成するためのヘルパーメソッド

“`
<%= link_to "sample app", '#', id: "logo" %>
“`

第1引数:リンクテキスト
第2引数:URL
第3引数:オプションハッシュ(必須ではない)

###image_tag
画像を表示するためのimgタグを作成するヘルパーメソッド。

“`
image_tag(“rails.png”, alt: “Rails logo”)
“`

第1引数:画像ファイル名
    ファイルの置き場所は「app/assets/images」フォルダと「public」フォルダの2つが用意されている。
上記の様に指定すると、「app/assets/images」が参照される。
    **「public」フォルダを参照したい場合は、ファイル名の前に「/」を入れる。**
第2引数:オプション
   alt:画像がない場合に代わりに表示される文字列
   size:’100×200′ 幅と高さを指定

“`
<%= link_to image_tag("rails.png

元記事を表示

[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
“`

元記事を表示

OTHERカテゴリの最新記事