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

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

[Rails]カラムを絞るだけの目的でselectメソッドは使うな!

# ActiveRecordのselectメソッドについて

ActiveRecordでデータを取得すると基本的に該当するテーブルのすべての項目が取得されます。
発行するSQLを見ていただくと分かる通り、*で全項目取得しています。
全項目取得しているので、以降の処理ではどの項目でも参照することができます。

“`pry
pry(main)> user = User.first
User Load (0.7ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
=> #
pry(main)> user.id
=> 1
pry(main)> user.name
=> “ham”
“`

ただ、全カラム使うわけではないので必要なカラムだけ取得したほうがいいのでは?という考え方もあると思います。
そんなときにselec

元記事を表示

[ruby]ドリルアウトプット

## 内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/19ef222e-a989-0760-a6a2-fc3582eea7de.png)

## 実装
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/c372ca62-9bda-b6a6-8c5d-140a4a91833e.png)

## 解説
①ターミナルから数値を入力する書き方
②条件分岐の書き方

まず①からです。ターミナルからの入力をしたいときは、getsを使います。getsだと入力した値が文字列になってしまうのでgetsの後ろに、.to_iをつけてgets.to_iとします。to_iメソッドは数値に変換するメソッドです。

②(条件分岐)は、if文を使います。今回は3つのパターンで条件を分けるため、elsifとelseも使います。
今回の条件は数値の比較です。比較には<や==などの比較演算子を使いま

元記事を表示

Herokuへのデプロイ(2回目以降の編集用)

# この記事でわかること
①Herokuでapp作成し、後にローカルで編集した変更点をデプロイする方法。

:thinking:初めてappを作成する人用ではないので注意!

### 前提として
ディレクトリは作成中のappに移動した状態。
アプリはRailsで作成しています。
  
  
  
  
:hugging:ではここから初めて行きます:hugging:

# コマンドの流れ

①Gemfileを変更したり追加したりしている場合バンドルインストール。
私はとにかく行っておきます。

“`
% bundle install
“`
  
  
②変更のコミット

“`
% git add .
% git commit -m “Add pg gem for Heroku”
“`
  
  
③リポジトリのプッシュをしてアプリのデプロイをする。

“`
% git push heroku master
“`
  
  
④DBマイグレーションする。
本番環境Heroku用の作業だと思っている。

“`
% he

元記事を表示

【初心者向け】「return」がイマイチ分からない2年前の自分に向けての記事(if-elseの話も少し)

#この記事を読んで習得できること
・プログラミングを初めてまだ「return」の使い方が分からない方々
・3年前の私

#経緯
大学院でプログラムを書いていた3年前のボク。
大学の研究で実験の解析で必要だったため、必死で書いていたのをなんとなく覚えている。

ひとまず、自分の行いたい解析プログラムは動くようになり、
喜びながらそのプログラムを使って解析を行っていた。

ひと段落してから、プログラムを見てみると、
「結構ソース汚いな…」と思い、修正しようと試みた。

しかし、ソースのスパゲッティ感*が半端なく、
なかなか修正が出来ずに、前回と同じようなソースなのに、
一から書き直したのを覚えている。

#3年前のソースで何が起こっていたのか
おおよそのイメージだが、こんな感じ。

“`sample.swift
func yabaiCode() {
if 条件1 {
処理1(15行以上)
処理A(10行以上)
処理4(10行以上)
} else if 条件2 {
処理2(15行以上)
処理A`

元記事を表示

コラッツ数、フィボナッチ数、三角数 色んな数列のプログラム作ってみた

何かQiitaに投稿できそうなネタは無いかなーーとフォルダを漁っていると、
6年以上前にProjectEulerちょっとやってみてた時のスクリプトを掘り起こしたので、
それを書きます(第2段)

実行環境は下記になります。
ruby 2.6.3p62
macOS Catalina 10.15.6
zsh

#コラッツ数を生成する

・偶数の場合、2で割る。
・奇数の場合、3を掛け1を足す。
のようにして進む数列。
数が大きいからと言って数列が長くなるとも限らず、なんとも不思議。
詳細で正確な解説は下記参照。
https://ja.wikipedia.org/wiki/コラッツの問題

“`collatz_number.rb
def get_collatz_next_number(num)
if num.even? then
return num / 2
elsif num == 1 then
return nil
else
return (num * 3) + 1
end
end
def create_

元記事を表示

[Ruby]2重ハッシュの中身の取り出し方

#概要
2重ハッシュの取り出し方について、備忘録としてまとめます。

#環境
Ruby 2.6.5

#内容
例えば、配列の内部に複数のハッシュをもつ変数user_dateがあるとします。

“`ruby
user_data = [
{
user: {
profile: {
name: ‘Taro’
}
}
},
{
user: {
profile: {
name: ‘Jiro’
}
}
},
{
user: {
profile: {
name: ‘Saburo’
}
}
}
]
“`

ハッシュの持っている値の取得には、その値に対応するキーを指定します。

“`
ハッシュ[取得する値のキー]
“`

また、二重ハッシュから特定のデータを取得する場合は、[取得する値のキー]を取得するデータまで連続して指定します。
したがって。全てのユーザーの名前だけを出力しようとすると以下の記述になります

元記事を表示

【パス指定】ネストしたリソースのパス指定

# 概要
ネストしたリソースのパス指定方法について、一瞬戸惑ってしまったので備忘録として記録します。

# 環境
・ruby ‘2.5.7’
・rails ‘5.2.3’
・rspec-rails ‘4.0.0.beta2’

# 指定方法

**結論:** `rails routes`してルーティングを一覧表示して確認する!

####(例) Rspecのリクエストテストでパス指定をする
次のような、ルーティングを宣言していたとします。

“`routes.rb
resources :datespots do
resources :comments, only: [:create, :destroy]
end
“`

ターミナルで`rails routes`すると、ルーティングが一覧表示される。

“`
Prefix Verb URI Pattern Control

元記事を表示

数字版のinclude? はないのか?

メモがてらのアウトプットです。

今回想定したのはよくあるお買い物ポイントを計算するプログラムを組みました。
下記コード

“`ruby:qiita.rb
n = gets.to_i

d_1,p_1 = Array.new(n){gets.chomp.split(‘ ‘).map{|i| i.to_i}}.transpose
p = 0
c = 0

while n > 0 do
if d_1[c].to_s.include?(“3”)
p += (p_1[c] * 0.03).floor
elsif d_1[c].to_s.include?(“5”)
p += (p_1[c] * 0.05).floor
else
p += (p_1[c] * 0.01).floor
end
c = c + 1
n = n – 1

end

puts p
“`

困ったのは1点 include?の使い方です。
結果的にto_sで文字列に返して参照しましたが
数字を直接参照するメソッドはないのかな?と
思いました。

探した限り見つからなかったの

元記事を表示

[初心者]Vagrantで構築した仮想環境にログインする手順

1、ターミナルを起動

まずは下記のように出てくる

“`
ユーザー名$
“`
  
 

2、現在のディレクトリから移動する
  今回はhome/MyVagrant/MyCentOS 内に”Vagrantfile”があるのでそこまで移動する。

“`
~$ cd //ホームディレクトリに戻る(場所の確認)
~$ cd MyVagrant
~$ cd MyCentOS   //MyCentOSまで移動

pc名:MyCentOS ユーザー名$  //←と出てくればOK
“`

  
  
3、仮想環境を起動、ログインする

“`
~$ vagrant up
~$ vagrant ssh
“`

この2つを実行後下記のように表示されていればログイン完了!

“`
[vagrant@localhost ~]$
“`

元記事を表示

Rails enum 都道府県をプルダウン方式で選択

# はじめに

個人開発アプリでGoogle APIと連携して地図情報を取得できる様にしたのですが、

住所を全て手入力するのは面倒なので都道府県をプルダウン方式で選択できるようにしようと思います。

“`ruby:new.html.erb

<%= form_for @ride, method: :post do |f| %>
<%= f.select :prefecture, ['北海道', '青森県', '秋田県', '岩手県' 以下略], { include_blank: '選択してください' } %>
<% end %>
“`

コードの可読性を無視して実装するならこんな感じで入力していくだけなのですが、

このようにview側に47都道府県全てを入力すると**非常に見苦しい**と思ったのでスマートにできる方法を探してみました。

# enum
enumというものがあるようでこれによってviewではなくmodelに記述することができ、

view側のコードをかなりスッキリさせることができます!

“`ruby:
class CreateRides < Activ

元記事を表示

配列のパターン計算、摘出のプログラム

練習でプログラムしてたのでアウトプットです。
今回は個人的にスッキリしたコードになりました。

“`ruby:qiita.rb
number = gets.chomp.split(‘ ‘).map{|i| i .to_i}
total = []

number.permutation(4) do |n|
total.push((n[0]*10+n[1]) + (n[2]*10 + n[3]))
end

puts total.max
“`

・入力した4つの数字を2つに切り分けて、それぞれに10の位、1の位を与える。
・できた2けたの数字を加算する。
・それを予め入力した4つの数字のならび全てに適用する
・その合計値が一番大きいものを出力しました。

わかりにいくいと思うので下記処理内容です。

“`ruby:qiita.rb
#入力した値
1 2 3 4

#パターン出力
46 ←12+ 34
55 ←34+ 21
37 以下全パターン
55
37
46
55
64
37
64
37
55
55
73
46
73
46
55
64
73
55
73
55
64

#

元記事を表示

プログラミング言語を学ぶ時には、はじめにプログラミング言語の家系図を見ておくとよいよ、という話

# プログラミミング言語の家系図ってなに

あるプログラミングがいつ、どのような言語に影響を受けて誕生したかを表す系譜のことです。

# プログラミミング言語の家系図はここにある

プログラミング家系図を載せているサイトはいくつかあるのですが、今回はこちらのサイトを紹介します。

[diagram & history of programming languages](http://rigaux.org/language-study/diagram.html) (プログラミング言語の系譜)

|![program_diagram.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288329/c5cab079-38a7-1cba-f4d0-0681f128ccd9.png)|
|:–|

主要言語のみものと、150以上の言語を載せているバージョンの2種類が記載されています。
2020年8月時点で、2018年の分まで記載されています。

# いくつかの言語をピックアップ

主要言語の図から、いくつかの言語を

元記事を表示

Railsのコントローラーについて

# 概要
Railsアプリケーションの**コントローラー**について解説してみたいと思います。

# 今回のゴール
**『MVCモデルについて知る』**・**『コントローラーの役割について』**・**『実践的な使い方』**をついて確認することです。

# 1. MVCモデルとは
アプリケーションを作成する時に、コードを上手に管理するための考え方のひとつです。
あくまで考え方のひとつなので、絶対的に正しいというものではありません。
Railsアプリケーションは、このMVCフレームワークを取り入れています。

## MVCの3要素
**『Model』**・**『View』**・**『Controller』**になります。
 
・`Model` ・・・ システムの中でビジネスロジックを担当する

・`View` ・・・  表示や入出力といった処理をする

・`Controller` ・・・ ユーザーの入力に基づき,ModelとViewを制御する

## RailsにおけるMVCの処理の流れ

1. クライアントからのリクエストを**『Controller』**が受け取る

2. **『Con

元記事を表示

CSV出力の0落ち対応

# はじめに
`001`などの先頭が0となっている数値をCSV出力しようとすると、0が省略され`1`と出力される問題の対応についてです。

# 対応

“`ruby
‘=”001″‘
“`
固定値の場合はこれで問題ないが、変数だと式展開されないので以下のようにする。

“`ruby
# ダブルクォートで囲むことに注意
%Q{=”#{hoge}”}
“`
Rubocop準拠すると、

“`ruby
# ダブルクォートで囲むことに注意
%(=”#{hoge}”)
“`

元記事を表示

【Ruby】複数の文字を置換したい場合

#gsubメソッド
複数の文字を置換したいときは`gsub`を使えば、指定した通りに置換する事が出来ます。
@scivolaさんからコメントを頂いて記事を修正させて頂きました。@scivolaさんご丁寧にありがとうございます!

##gsub【置換したい部分をすべて置換】
以下例

“`ruby
x = “TOKYO”
y = x.gsub(/[TOKY]/, “T” => “5”, “O” => “3”, “K” => “6”, “Y” => “1”)
puts y
=> 53613
“`
該当したものを一字ずつ置換してくれます
また、置換時には文字列化されるので、5と書いても”5″と書いても結果は変わりません。

##String#trメソッド
また、1 文字を 1 文字に置き換える「換え字」なら,gsub を使うより専用メソッド String#tr を使ったほうが簡潔で高速みたいです!

“`ruby
y = x.tr(“TOKY”, “5361”)
“`

元記事を表示

オブジェクト指向についての論理的な考え方をまとめてみました。

#オブジェクト指向について
#####これから説明する中で使われる用語を簡単にまとめました。
“`
オブジェクト = 全てのデータのこと、物、

オブジェクト指向 = 一言で言うと「抽象的な概念」=それぞれの持つ共通の情報をまとめたものから個別の情報を持った物を作る

メソッド = プログラミングにおける何らかの処理をすること。例えば print(“hello world”)
“hello world”と言うのが**オブジェクト**。これを出力するための処理が**print**になります。つまりprintメソッド)

クラス = 設計図のこと

インスタンス = 設計図(クラス)で作られた実体のこと
“`

##**はじめに**
RubyやPython(オブジェクト指向言語は他にもあります。)と言うのは全てをオブジェクトとして扱っています。オブジェクトと言うのはそれぞれが固有の性質、固有の動作を使って返り値を返します。
例えば、現実世界で例えると、人間一人一人(Aさんと言う人間、Bさんと言う人間。)と言うのは別々のオブジェクトになります。一人の人間に「Aさん」と言うオブジェクトがあ

元記事を表示

友愛数、完全数、過剰数、不足数、回文数 色んな数のプログラムを作ってみた

何かQiitaに投稿できそうなネタは無いかなーーとフォルダを漁っていると、
6年以上前にProjectEulerちょっとやってみてた時のスクリプトを掘り起こしたので、
それを書きます

実行環境は下記になります。
ruby 2.6.3p62
macOS Catalina 10.15.6
zsh

:zero::one::two::three::four::five::six::seven::eight::nine::ten:

#約数を生成する

約数なんだったけという方は下記を参照下さい。
https://ja.wikipedia.org/wiki/約数

“`divisor.rb
def create_divisor (num)
divisor_ary = Array.new
partner_divisor_ary = Array.new

if num < 1 then return nil elsif num == 1 then divisor_ary.push 1 else i

元記事を表示

Rails Tutorialを咀嚼する【第3章 ほぼ静的なページの作成】

#3.1 セットアップ

【演習】
1.BitbucketがMarkdown記法のREADME (リスト 3.3) をHTMLとして正しく描画しているか、確認してみてください。
2.本番環境 (Heroku) のルートURLにアクセスして、デプロイが成功したかどうか確かめてみてください。

⇒そのままやってみてください。
#3.2 静的ページ
■コントローラ
コントローラとは (基本的に動的な) Webページの集合を束ねるコンテナのこと。
→ちょっと意味が分からない。

■rails generate controller StaticPages home help
コントローラーにstatic_pages_controller.rbが生成される。
routes.rbに
・static_pages/home
・static_pages/help
が生成される。

この時点でアドレスバーに「static_pages/home」と入力すれば移動する。
異動する先はビューの「home.html.erb」。
※helpも同様。

■HTTPメソッド
GET、POST、PATCH、DELETEの

元記事を表示

gemをリリースしてみる

Rubyのgemをリリースしてみる。正確には、前回2009年にリリースしているので、11年ぶりの再リリースとなる。gemのリリース方法は、以下を参考にした。
参考:https://qiita.com/9sako6/items/72994b8b1c00af4e61fe

# 1. 以前リリースしたものを取得する
以前リリースしたものは、以下にある。つまり、現時点でも gem install cutepとすると使える。

– https://rubygems.org/gems/cutep

RubyForge消滅に伴い、ホームページが消えているし、ソースコードも見られなくなっている。GitHubで再リリースする。自分のところに元ファイルはあるが、gemと同じものからスタートすることにした。以下より、ソースコードを取得する。

– https://rubygems.org/downloads/cutep-1.0.0.gem

.gemという拡張子をzipに変更し、解凍。そうすると、data.tar.gzとmetadata.gzが出てくる。これを解凍すると、ソースが見られる。

# 2. bu

元記事を表示

配列に効率よく値を入れるにはどうすればいいんだ?

なんとなく投稿します。
rubyでプログラム書いてたんですが、今更ながら配列の理解が浅いことに気づいた。
例えばこれ

“`ruby:qiita.rb
xc,yc,r_1,r_2 = gets.chomp.split(‘ ‘).map{|i| i.to_i}
n = gets.to_i
x = []
y = []
n.times do
a,b = gets.chomp.split(‘ ‘).map{|i| i.to_i}
x.push a
y.push b
end
c = 0

while n > 0 do
if r_1**2 <= ((x[c] - xc)**2 + (y[c] - yc)**2) && (x[c] - xc)**2 + ((y[c] - yc)**2) <= r_2**2 puts "yes" else puts "no" end n = n - 1 c = c + 1 end ``` 処理の中身(while)は今回どうでも良いのですが それに至るまでに、 xとyの配列の定義 a,bの変数を定義 a,bの変数を順

元記事を表示

OTHERカテゴリの最新記事