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

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

Ruby → Python チートシート(文字列Stringクラス編)

####凡例
>メソッド名(兼ドキュメントへのリンク)
>【Ruby】例
>【Python】対応する例(シンタックスや結果の違いがわかるようなもの)
> 対応ドキュメントのURL

* ここでは変数 `r = “ルビー”` `p = “パイソン”` としています。
* -∗- encoding: UTF-8 -∗- です。

#INDEX

####[%](https://docs.ruby-lang.org/ja/latest/class/String.html#I_–25)
【Ruby】`”%s vs %s”%[r, p] # => “ルビー vs パイソン”`(※ 引数は配列)
【Python】`”%s vs %s”%(r, p) # => “ルビー vs パイソン”`(※ 引数はタプル)
https://docs.python.org/ja/3/library/stdtypes.html#printf-style-string-formatting

####[<<](https://docs.ruby-lang.org/ja/late

元記事を表示

【f.attachment_filed】 gem refile 使用時 画像送信ボタン CSS 変更

#【ゴール】
gemfile ‘refile’ 使用時の画像送信ボタンのレイアウトを変更

#【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

#【実装】
アプリケーション内のGemfile内に以下を記述

“`アプリケーション内.Gemfile
#refileをインストール
gem “refile”, require: “refile/rails”, github: ‘manfe/refile’
gem “refile-mini_magick”

#jqueryをインストール
gem ‘bootstrap-sass’, ‘~> 3.3.6’
gem ‘jquery-rails’
“`

gemfileを対象アプリへ認識させます

“`Mac内.terminal
$ bundle install
“`

お好きなviewページで以下を入力(これが画像を送信するボタン)

“`(お好きな.view)

元記事を表示

【boolean型】 viewへの反映、選択機能 実装  

#【ゴール】
boolean型を使用してviewファイルへ反映させる
参考にしたサイト:http://banker0507.blogspot.com/2012/07/booleantruefalse.html

#【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

#【実装】

アプリケーションを起動

※新規アプリケーション作成については、[【Rails new】Ruby on rails アプリケーション作成](https://qiita.com/tanaka-yu3/items/3fe1ed2852c6513d3583 )を参照。

“`Mac内.terminal
rais g migration Add(データを追加したいデータファイル名)To(追加したいデータ)
“`

“`add.migartionファイル
add_column :(データを追加したいデータファイル名) , :sex ,:boolean
end
“`

“`Mac内.ter

元記事を表示

【Rails】enumの使い方

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# boolean型

**Userモデルの「is_valid」というカラムに、
“有効”と”無効” を定義したいという想定で進めます。**

###1.`enum`をモデルに定義

“`ruby:~.rb
enum is_valid: { “有効”: true, “無効”: false }
“`

###2.ビューでの使い方

####**①プルダウンメニューで使用する場合**

“`erb:~.html.erb
<%= f.select :is_valid, User.is_valids.keys, include_blank: "-----" %>
“`

`<%= f.select :カラム名, モデル.カラムの複数形.enumのkey又はvalueの複数形 %>`

####**②ラジオボタンで使用する場合**

“`erb:~.html.erb
<%= f.radio_button :is

元記事を表示

【Ruby】配列操作

実務入りたての頃にチェリー本で勉強した備忘録。
公開したほうが外部の目も入っていいかなと。

下記配列に対する操作。

“`ruby
a = [1, 2, 3, 4, 5]
“`
## 要素の取得方法
2つ目の要素から3つ分の要素を取り出す。

“`ruby
a[1, 3] # => [2, 3, 4]
“`
取得したい要素の添字を複数指定する

“`ruby
a.value_at(0,2,4) # => [1, 3, 5]
“`
最初の要素から2つを取得する

“`ruby
a.first(2) # => [1, 2]
“`
最後の3つの要素を取得する

“`ruby
a.last(3) # => [3, 4, 5]
“`
## 要素の変更方法
末尾に要素の追加

“`ruby
a << 1 # => [1, 2, 3, 4, 5, 1]
“`
複数要素を追加

“`ruby
a.push(100,200) # => [1, 2, 3, 4, 5, 100, 200]
“`
一致する要素を削除

“`ruby
a = [1, 2, 3, 4, 5, 2]

元記事を表示

【Ruby】ブロックで使う配列メソッド

実務入りたての頃にチェリー本で勉強した備忘録。
公開したほうが外部の目も入っていいかなと。

## each
配列の繰り返し処理で最もよく使われるメソッド。
要素を一つずつ取り出し、ブロック内の処理を行う。

“`ruby
items = [1, 2, 3, 4, 5]
sum = 0

# 各要素を足していく
items.each { |i| sum += i }

sum # => 15
“`

## each_with_index / each.with_index
`each`文の処理にインデックスの数字をつけたい場合に使用。
`each.with_index`は引数にインデックスを開始する数値を指定できる。

“`ruby
[5, 10, 15].each_with_index do |n, i|
p [n, i]
end
# => [5, 0]
# [10, 1]
# [15, 2]
“`
“`ruby
[5, 10, 15].each.with_index(1) do |n, i|
p [n, i]
end
# => [5, 1]
#

元記事を表示

[図解] 誰でもわかる N+1問題 ActiveRecode

#図解 N+1問題
今回はN+1問題について、図解で説明していきたいと思います。
Ruby on Railsで使われているORMであるActiveRecordを題材に解説をしていきます。

#N+1問題とは?
簡単に説明をすると、

**ループ処理等によって繰り返し、
SQLが発行されてしまう問題のことをN+1問題と言います。**

図を見た方が理解がしやすいと思います。

今回の例では、
Client と Address 互いに関連付けのある2テーブルがあると仮定して話を進めて行きます。
下記の図では、各Clientが持つAddressテーブルのpostcodeを取得しようとしています。

![N+1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354877/a2fa1c04-0590-63fd-1824-aca728a3f3f0.png)

“`
clients = Client.all
“`

画像の最初の行の、
Client.allでは以下のような問い合わせを行っています。
この問い合

元記事を表示

rails 保存したデータの表示

#ActiveRecord クラス
テーブルから情報を取得するために必要なメソッドを兼ね備えたクラス。
例)ActiveRecordクラスに含まれるメソッドの一例

“`
メソッド  用途
all    テーブルの全てのデータを取得する
find  テーブルのレコードの内、ある1つのデータを取得する
new   クラスのインスタンス(レコード)を生成する
save   クラスのインスタンス(レコード)を保存する
“`

#rails c コマンド
実際にRailsアプリケーション内に記載するメソッドを練習することができる機能。
rails cを起動することによって、コンソールで操作が可能になる。

“`
$ rails c # コンソールの起動
irb(main):001:0>

irb(main):001:0> exit # コンソールの終了
$

irb(main):001:0> Post.all # 全てのデータを取得

irb(main):001:0> Post.find(1) # 1番目ののデータを取得

irb(main):001:0> post =

元記事を表示

rails ルーティングについて

#ルーティング
リクエストの行き先を指定する「道しるべ」のこと。
クライアントからリクエストがあった際に、リクエストに対応した行き先を定義する。

#トップページへのルーティングの作成
ルーティングはconfigディレクトリの、routes.rbに記述していく。
以下のように記述。
例)

“`config/routes.rb
Rails.application.routes.draw do
[HTTPメソッド] ‘[URIパターン]’, to: ‘[コントローラー名]#[アクション名]’
end
“`

#HTTPメソッド
クライアントから送られたリクエストの種別を表すもの。

“`
HTTPメソッド どのような時に用いられるリクエストか
GET ページを表示する操作のみを行う時
POST データを登録する操作をする時
PUT データを変更する操作をする時
DELETE データを削除する操作を行う時
“`

#コントローラー
ルーティングの次にやってくる処理のこと。

#アクション
コントローラー内における

元記事を表示

日時を日本時間で表示する

## 目的
アプリ内で作成したレコードを表示させる際に、デフォルトのUTC(協定世界時)からJST(日本標準時)に変更し表示させる。

### 準備
事前にアプリケーションの基本的な機能が実装されているものとして話を進めます。
まずユーザーでもなんでもいいので、テーブルにレコードを作成します。
Sequel ProなどのGUIツールで確認すると、`created_atカラム`に日本時間よりも約9時間遅い時間で作成されたことになっているはずです。ここから日本時間で表示する設定をしていきます。

### 手順
`config/application.rb`に以下の記述をします。

“`Ruby:config/application.rb
# 省略

class Application < Rails::Application config.time_zone = 'Tokyo' end ``` アプリを立ち上げた段階で既にコードが用意されているので、その中から`class Application`を探し、その中にタイムゾーンの記述をします。 この後、必ずサーバを再起動してから

元記事を表示

5分で大体把握!Rubyにおけるメソッドのアクセス制御

# はじめに
この記事を書いた動機は、Rubyにおけるクラスのアクセス制御である、**privateとprotectedの違い**が分からなかったためです。

どちらも**メソッドを隠し、クラス外から呼び出しができないようにする目的**で使用されるそうですが、自分にはその二つの違いがよく分かっていませんでした。

この記事では、**private**と**protectedの違い**について、簡単に説明します。

## 対象読者
– 最近、他言語からRubyに移ってきた方

– **private**と**protected**の違いについて知りたい方

## なぜアクセス制御をかけるのか
クラスを設計するときに、クラス内でしか参照されないようなメソッドを書く場合があります。
こことき、**クラス内の他のメソッドから実行されるだけのメソッド**が、クラス外から実行できるようになっていると**予想外の結果**になってしまいます。
そのため、適宜メソッドにアクセス制御を行う必要があります。

## Rubyメソッドにおけるアクセス制御の種類

</p

元記事を表示

Railsで簡単なレベル機能

#Railsで簡単なレベル機能を作ってみた

今回はこれまで作ってきたSNSサービスにレベル機能を追加しました。
簡易的なものなのであくまで参考程度にして頂ければと思います。

<開発環境>
1. ruby 2.6.3
2. Rails 5.1.6
3. AWS Cloud9
4. GitHub
6. sqlite3(develop環境)

## 設計構想
・一定の経験値(exp)を貯めるとレベルが上がっていく機能。

・投稿と紐づけて自分の食べたラーメンの種類によって得られる経験値が変わる
→postテーブルにexpカラムを設置して投稿するとexpが得られる、postテーブルのuser_idと紐づけてexpの合計値を出す。expの合計値によってレベルに反映されていく。

・userにpostで得られたexpの合計(exp_sum)がlevelとして表示される。

## モデル
今回用意するのはpostテーブルにexp(経験値)カラム、userテーブルに経験値の合計であるexp_sumカラム、levelカラムの三つです。

“`
rails g migration add_exp_t

元記事を表示

ECサイト 商品ランキング機能 実装方法

商品の購入された回数に応じてランキングを表示する方法。

## 前提
・ECサイトの製作
・商品のテーブルをitemとしている
・注文された商品をOrderItemとしている

## コントローラー

“`controller.rb
def index
@rank_items = OrderItem.find(OrderItem.group(:item_id).order(‘count(quantity) desc’).limit(3).pluck(:id))
end
“`

“`@rank_itemsの詳細説明.rb

OrderItem.group(:item_id) #OrderItemのitem_idが同じものをグループに分ける。
.order(‘count(quantity) desc’) #ここでのorderは順に並べるという意味。descが大きい順にという意味。
.limit(3) #表示する最大数を3個に指定。
.pluck(:id)) #idを取り出す。

OrderItem.find() #pluckで取り出された数字をOrderItemのIDとす

元記事を表示

【Rails】sorceryのログイン機能を実装

[sorcery公式](https://github.com/Sorcery/sorcery)
[sorceryメソッド](https://github.com/Sorcery/sorcery/blob/7c5fee441e03779ee2888ecef317440cd10a17e7/lib/sorcery/controller.rb#L76-L78)

## sorceryのインストール

“`ruby:Gemfile
gem ‘sorcery’
“`

## Userモデルを作成する
– `bundle exec rails g sorcery:install`を実行すると、以下のファイルが作成されるので、`db:migrate`する。
– migrationファイル(db/migrate/〇〇〇〇_sorcery_core.rb)
– initializerファイル(config/initializers/sorcery.rb)
– Userモデル

“`ruby:db/migrate/〇〇〇〇_sorcery_core.rb
class SorceryCore <

元記事を表示

ServerspecでSSH接続しようとしたら「NotImplementedError: net-ssh requires the following gems for ed25519 support」のエラー

# 発生状況
Centos8 のサーバに Serverspec をインストールし、テストサーバにSSH接続しようとしたら以下のエラー

“`console
~]# rake spec KEY=.ssh/id_rsa PASSPHRASE=XXXXX
/usr/bin/ruby -I/usr/local/share/gems/gems/rspec-support-3.9.2/lib:/usr/local/share/gems/gems/rspec-core-3.9.1/lib /usr/l

An error occurred while loading ./spec/centos8-docker/sample_spec.rb.
On host `centos8-docker’
Failure/Error:
describe package(‘httpd’), :if => os[:family] == ‘redhat’ do
it { should be_installed }
end
NotImplementedError:
OpenSSH keys only

元記事を表示

【Rails】kaminariを使用してページネーション機能を実装

## ページネーションとは
投稿一覧ページなどを複数のページに分割して表示させること。
トップページで全ての投稿を表示させると、データの読み込みに時間がかかるので、ページネーションを使う。

## kaminariとは

ページネーションを簡単に実装するためのgem。
[kaminari](https://github.com/kaminari/kaminari)

Gemfileに以下のように記述して、`bundle install`を実行すると準備完了。

“`ruby:Gemfile
gem ‘kaminari’
“`

“`ruby
$ bundle install
“`

## 設定ファイルをカスタマイズする

kaminariの設定ファイルを作成

“`terminal
$ rails g kaminari:config
create config/initializers/kaminari_config.rb
“`

上記コマンドにより、config/initializers ディレクトリ直下に、以下の設定ファイルが生成される。

“`ru

元記事を表示

【Rails】RSpecを用いてテストを書くために準備する事

##はじめに
「[現場で使える 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/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E7%8F%BE%E5%A0%B4Rails&qid=1586706956&sr=8-2)」にて紹介されていた、RSpecでテストを記述していくための必要事項を備忘録的にまとめました。

※環境Rails5.1以降

##RSpecではシステムテストを使用することにする
####システムテスト(System Test)とは
  ・E2E(End-t

元記事を表示

CircleCIでdocker-composeを使用して自動テストしてみた

#はじめに
今回は、CircleCi上でdocker-composeを使用して自動テストを導入してみました。CircleCi上ではRSpecのテストを行っています。ローカルのテスト環境用ocker-compose.ymlをそのまま使用しているので比較的簡単にCircleCiを導入できました。何かの参考になればと思い記事にしてみました。
尚、開発環境とテスト環境用の設定については以前記事にしているこちらを使用しています。
[DockerでNginx+unicorn+rails+Mysqlの開発環境を作ってみた](https://qiita.com/E6YOteYPzmFGfOD/items/509dbabeb20bf2487283)
[Docker+Rails+HeadlessChromeでRSpecのSystem Testしてみた](https://qiita.com/E6YOteYPzmFGfOD/items/905cce063b0d21a0eccb)

###参考にさせていただいた記事
[docker-composeでRailsを開発しCircleCI 2.0でテストしてHerok

元記事を表示

Kinx アルゴリズム – クイックソート

# アルゴリズム – クイックソート

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。「プログラム=アルゴリズム+データ構造」。アルゴリズムの実装例をご紹介。

元ネタは「C言語による(30年経っても)最新アルゴリズム事典」。今回はソート(クイックソート)です。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

アルゴリズムと言えばソート。その中でも一番使うであろうクイッ

元記事を表示

悲観的バージョン演算子(~>)とは何か?

# 悲観的バージョン演算子(~>)
Rubyでの開発を行っていると一度は出会う **悲観的バージョン演算子(~>)(Pessimistic Operator)**。Gemfileで例えば**~>0.7.7**などと記述されているのを見て、初めての方だと混乱される方も多いだろうし、少し慣れている方でもついググってしまう方もおられるかもしれない。そこでここでは初めての方には一先ず理解してもらうべく、初見ではない方にはもうググらなくて済むことを願って解説していければと思います。

## x.x.xの例
x.x.xの形式でバージョン指定が行われている場合、例えば下記の様にGemfileが記述されている場合を考えてみる。
“`gem ‘rails’, ‘~>4.2.6’“`
これは結論から言うと“`4.2.6 <= 'rails' < 4.3```となる。 ではどの様に考えれば、この結論に至るのかを順を追って説明したい。 ### まずは最小値である下限から考えてみる 上記の例を使用するとこの場合の下限は**4.2.6**となることが分かる。これでまずは下限が決まった。簡単。 ###

元記事を表示

OTHERカテゴリの最新記事