Ruby関連のことを調べてみた2021年03月19日

Ruby関連のことを調べてみた2021年03月19日

結合テストコード

# やり方

① Gemfileのgroup :test doにgem ‘capybara’, ‘>= 2.15’と書いてあると思うので、導入済みです。
もし、書いてなかったら、記述してbundle install

② % rails g rspec:system usersとターミナルに記述して生成

元記事を表示

【Project Euler】 Problem5 【解いてみた】

# はじめに
【Project Euler】とは、プログラミングで解く数学の問題集です。

本投稿では初学者なりに、Problem1 を解くにあたっての考え方を解説しています。
ちなみに言語はRubyを用いています。

※本投稿は、Project Eulerのガイドラインに従い、解答例としてのコードは載せておりません。
 また、問題に関しては私が翻訳しています。ミスがあればご指摘ください。
  
【Project Euler】について知りたい方はこちらから↓

https://projecteuler.net/

# 問題(original ver.)
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
# 問題(翻訳ver.)

元記事を表示

初学者のプログラミング NoMethodErrorの解決について

##データをオブジェクトに追加する時に起きた
“`console
NoMethodError (undefined method `books’ for #)
“`
データを作成して、紐付けてあるオブジェクトに追加しようとして起きた。
調べてみるとエラー文の内容は「定義されていない」という意味だったため、コンソール上で確認してみたところ、データは確認できたため、定数を再度、定義しなおしたら解決した。

## さいごに
プログラミングの初学者です。その日に学んだことを学習の一環としてアウトプットしています。より深く学習していきたいと考えておりますので、ご指摘等いただけますと幸いです。

参考図書:パーフェクト Ruby on Rails【増補改訂版】すがわらまさのり/前島真一/橋立友宏/後藤優一/五十嵐邦明

元記事を表示

Rubyでスロットゲームしよう

### Rubyでスロットゲームを作ってみた
3×3の列をランダムに生成して、横に揃ったらコインを獲得するシンプルなスロットゲームを作る。
コインがなくなったら強制終了。

“`ruby:Ruby
require ‘io/console’

def slot_start() # 使用するコインを選択する
puts(“コイン何枚入れますか”)
puts(“1(10コイン) 2(30コイン) 3(50コイン) 4(やめとく)”)
bet = gets.chomp.to_i

if bet == 1
bet_coin = 10
elsif bet == 2
bet_coin = 30
elsif bet == 3
bet_coin = 50
elsif bet == 4
puts(“やーめよ”)
exit
end

return bet, bet_coi

元記事を表示

Rubyでできるあっち向いてホイ

###あっち向いてホイとは
まず、2人でじゃんけんを行う。その勝敗が決まった直後、「あっち向いてホイ!」の掛け声の後、負けた方は上下左右のいずれか一方へ顔を向け、勝った方は上下左右のいずれか一方を指差す。顔を向けた方向と指を差した方向が一致すると指を差した方の勝ちとなり、一致しなかった場合じゃんけんからやり直しとなる。([Wikipedia](https://ja.wikipedia.org/wiki/%E3%81%82%E3%81%A3%E3%81%A1%E5%90%91%E3%81%84%E3%81%A6%E3%83%9B%E3%82%A4)より)

### 実際に作ってみた
勝敗が決まるまでじゃんけんをする(あいこはループ)、あっち向いてホイをする(勝敗が決まらなければじゃんけんからループ)の処理が必要

“`ruby:Ruby
def start_rps(text) #自分の手を選択する関数
puts(text)
puts(“0(グー) 1(チョキ) 2(パー) 3(戦わない)”)
player_rps = gets.chomp.to_i

元記事を表示

【実践して学ぶ!】RailsのTurbolinks利用でもJavaScriptが使用したい時にすること3選

どうも、三町哲平です!

Ruby on Railsで、アプリを開発中に導入したはずのJavaScriptが反応しない!何でなの!?という経験は、誰にでもあることかと思います。

1回目のサイト表示は上手くいくのに次にリンクをクリックしても表示しない…。キャッシュが原因なのだろうか?など、疑問が生まれた方も数多くいらっしゃるのではないのでしょうか?

そうした疑問点を抱いた中、調べていくとターボリンクなる機能に行き着きました。

てな訳で、今回は自分自身の理解を深める為にもRails初心者の方になるべく分かりやすい様に記事を書きましたので、よろしくお願いします。

※この記事は、Rails6を使用していますが、標準であるWebpackerではなくsprocketsを使用しています。

# turbolinksとは?
そもそもturbolinkとは何なのか?
> Turbolinksはリンクを生成する要素であるa要素のクリックをフックにして、
移動した先のページをAjaxで取得します。
その後、取得ページのデータが遷移前のページと同じものがあれば再利用し、
title・body要素を

元記事を表示

【Rails】なぜ、renderとredirectを使い分けるのか?【Ruby】

先に結論を書くと、renderとredirect_toは処理の流れが違うため、各メソッドのメリットが享受できるように使い分ける必要があります。
そのメリットについて書いていきます。

renderのメリット

renderのメリットはアクションで使用していたインスタンス変数を保持したまま、viewを描画できる点です。

“`ruby:render
def index
@books = Book.all
end

def show
@book = Book.find_by(id: params[:id])
if @book.nil?
render action: “index”
end
end
“`

上の例では、通常アクションと同viewが呼び出されるところを、renderを使うことによってことでインスタンス変数(@book)をそのまま保持してviewを表示することができます。

また、renderを使う場合メッセージを表示する際に、使われるflashメソッドは「flash.now」を使用することが多いです。

通常のf

元記事を表示

解決!Your Ruby version is x.x.x, but your Gemfile specified x.x.x

#Herokuにデプロイしようとすると…
ruby のバージョンが 2.6.3 になっているけど、2.6.6 を使用しろと言われた。
この時点で参考にした[サイト][link-1]はこちら。
[link-1]:
https://qiita.com/___xxx_/items/12c8ab953bc6aaeb8c24#1ruby%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92266%E3%81%8B272%E3%81%8B300%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B

まずはrbenv でバージョンを変えてみて確認する。

“`terminal:ターミナル
% rbenv global 2.6.6
% rbenv versions
system
2.5.1
2.6.3
* 2.6.6 (set by /Users/randytozuka/.rbenv/version)

“`
フムフム 2.6.6 になったね。
じゃ、念の為…

“`
%

元記事を表示

wordpressからhugoへの移行(超絶シンプル-簡単編-)

# きっかけ
CMSの維持管理が大変。Tumblrなんかで独自ドメイン運用も考えたけど、今更htmlでサイト作りたくなかったのパスした。
最終的にgitlab-pagesでhugoを運用することにした。コストは全然掛からない。が!wordpressから記事を移行しなくてはいけない。

##方法
wordpressの移行ツールや、xmlのエクスポートは直接触らない。画像などのデータのみエクスポート機能を使った。
おもむろに動いているwordpressのRSSにすべての記事、本文全文を配信するように設定した後、以下のrubyスクリプトを実行する。

“`ruby
#!/bin/ruby

require ‘xmlsimple’
require ‘open-uri’
require ‘reverse_markdown’
require ‘date’
require “fileutils”

domain = “XXXX.YYYYY.ZZZ”
rss = “https://” + domain + “/feed”

hash = XmlSimple.xml_in(open(rss))
arr

元記事を表示

Rails6の初期設定をする〜PostgreSQL, Tailwind CSS〜

## 環境
開発環境はMacです。
基本的にbrewで環境整えました。

||バージョン|
|—|—|
|Ruby| 2.7.2|
|Rails| 6.1.3|
|PostgreSQL| 12.6|

## 手順

### アプリを作成

“`sh
$ rails new appname -M -d postgresql
“`

1. `rails new appname`でアプリ名「appname」を指定
2. `-M`でAction Mailerを組み込まないようにする
3. `-d postgresql`で使用するDBサーバー に「PostgreSQL」を指定

**参考**

– [railsコマンドのオプション](https://railsdoc.com/rails)

### 不要なroutesを削除(Action Mailbox)

作成したアプリのroutesを確認すると、すでにいろいろなroutesが設定されています。
今回のアプリで使用しない設定は削除します。

“`sh
$ bin/rails routes

元記事を表示

【Railsチュートリアル】第14章 ユーザーをフォローする①

# はじめに
* 他のユーザーをフォロー(およびフォロー解除)できるソーシャルな仕組みの追加する
* フォローしているユーザーの投稿をステータスフィードに表示する機能を追加する

**ページ操作の全体的なフロー**
1. あるユーザー(John Calvin)は自分のプロフィールページを最初に表示し(図 14.1)、フォローするユーザーを選択するためにUsersページ(図 14.2)に移動します。
2. Calvinは2番目のユーザーThomas Hobbes(図 14.3)を表示し、[Follow]ボタンを押してフォローします。
3. これにより、[Follow]ボタンが[Unfollow]に変わり、Hobbes の[followers]カウントが1人増えます(図 14.4)。
4. CalvinがHomeページに戻ると、[following]カウントが1人増え、Hobbesのマイクロポストがステータスフィードに表示されるようになっていることがわかります(図 14.5)。

# 14.1 Relationshipモデル
## 14.1.1 データモデルの問題(および解決策)

*

元記事を表示

Seleniumで、タグやクラスなどではなくテキストで要素を特定する方法

Seleniumはブラウザ上で自動化して情報を取得したり、操作したりできて大変お役立ちなわけだが、要素の取得方法は限定的だったりして迷うことが多かったのでメモ的に(自分はruby使ってるのでrubyについてだが、多分他の言語でも同じようなこととは思う)。当たり前だろって感じなので、そんなに目新しいものはないけど。

通常、Seleniumによって要素を取得する方法はclassやid、xpathによって行う。

“`ruby
driver = Selenium::webDriver.for :chrome

obj = driver.find_element(xpath: “//div[@class=’hoge’]/p”)
“`

多くはこのようにかいて、divタグのクラスhoge内のpタグの要素を取得するなど指定するわけだ。

しかしいずれの場合でもHTMLタグで取得したい情報の位置を指定するので、HTMLタグ側に特定の文字列がないと、とりたい情報を特定出来ない場合がある。同じようなHTMLが並んでて、テキストだけが違う場合はどうしたらよいだろう?

この場合でも同じように、ま

元記事を表示

オブジェクト指向

アプリケーションを作成するときに、登場する役割ごとに分けて実装する方針のことをオブジェクト指向と言います。RubyなどのWebアプリケーションに使用される言語の多くが、オブジェクト指向で実装する必要があります。

オブジェクト指向のメリットは以下の2点です。

*役割ごとにオブジェクトを分けることで、実装がしやすくなる
*役割ごとにオブジェクトを分けることで、あとからコードを改変するときも、他のオブジェクトに影響しなくなる(コードの改変がしやすくなる)

オブジェクトとは、Rubyにおけるクラスやインスタンス、その他の値のことを意味します。例えば、文字列や数値、配列やハッシュなど、これまで値と呼んできたものも全てオブジェクトです。この他にも、Rubyでは様々な便利な特徴を持ったオブジェクトが用意されていて、組み込みライブラリという形やGemという形で使用できます。
クラスに含まれる値や処理のまとまり(= オブジェクト)を意識しながら、実装することがオブジェクト指向なのです。

では誰によってオブジェクト指向が決められるのか。
オブジェクトの切り分けは、1つの正解におさまるのでしょうか

元記事を表示

ホテルの客室予約 予約する時の空室検索の実装

初めての投稿です!
プログラミングスクール3ヶ月目でPFで架空のホテルのホームページを制作しました。
予約する時の空室検索を実装するときに参考になる記事を見つけることができず苦労したので参考になればと思い共有させていただきます。
※本格的なものではありません!
![スクリーンショット 2021-03-18 18.25.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1020497/1e1aeb2b-4a0c-73be-e501-11519b7ccd9b.png)
※検索ページ↑
##仕組み
![スクリーンショット 2021-03-18 17.28.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1020497/1edb3e9c-89fb-ee85-67f8-1e6d5c034236.png)
>ホテルにはA、B、Cという部屋がある。
・Aタイプはホテルに3室、Bタイプはホテルに5室、Cタイプはホテルに10室(部屋

元記事を表示

Rubyで理解するポリモーフィズムから、Goのインターフェースへ①

#何を書くか
私は現在、Go言語の学習に取り組んでいます。
そこで、**「インターフェース」**という概念を学びました。

##何やこれ
正直、教本を読んでも全然なんのこっちゃと言った感じだったので、[こちら](https://qiita.com/k-penguin-sato/items/885a61d819cc431304f5)の記事を覗いてみました。

すると

>interface(インターフェース) を利用することで、オブジェクト指向言語でいうところのポリモーフィズムと同様の機能を実現できます。

との説明がありました。ふむふむ。ポリモーフィズムね。

何だそりゃ。

##ということで
Rubyの学習も兼ねて、まずはオブジェクト指向のポリモーフィズムを理解し、それからインターフェースを学習していこうと思います。

一応二部作の予定で書いていきます。
1部目の今回は、**ポリモーフィズム**について、自分が調べただけつらつらとお話ししていこうと思います。

#ポリモーフィズムとは
**オブジェクト指向言語(Rubyが持つプログラミング言語が持つ概念的な捉え方)**には、守べき設計

元記事を表示

Rails カラム名を変更かつ全てのファイルでカラム名を置換する(VSCode限定)

プログラミング初心者です。
ポートフォリオの作成をある程度進めた段階でテーブルのカラム名にスペルミスがあったことに気づき、テーブルのカラム名とカラム名を使用している全てのファイルを変更しました。

**※テーブルのカラム名変更まではRailsでのコマンドですが、全ファイルのカラム名置換はVSCodeでの操作になります。**

## 環境
ruby ‘2.6.5’
rails ‘6.0.0’

エディタ VSCode

## 解決したいこと
店舗情報を保存するStoreモデルで、住所を保存するカラム名を”address”とするはずが、”adress”とスペルミスをしていました。
しかし”adress”という名前でビューやモデルなど複数のファイルに記述してしまっているため、全てのファイルで一個一個手直しするのは面倒です。
そのため**1.テーブル上のカラム名を変更**し、**2.全ファイルのソースコード上のカラム名を変更**していきます。

## 1.テーブル上のカラム名変更

下記のコマンドで、カラム名変更を記述するmigrationファイルを生成します。

“`
$ rails ge

元記事を表示

2020/10以降のherokuへのpushについて。

なんてことはないのですが、gitの仕様変更に伴って起きたエラー。

## %git push heroku masterが使えなくなってしまった

### 遭遇したエラー
“`
error: src refspec master does not match any
error: failed to push some refs to ‘git@github.com:user-name/repository-name.git’

“`

###???

2020/10以降、gitで自動生成するとmasterブランチではなく、mainブランチができることによるエラーでした。

“`
%git push heroku main
“`

とすることで無事通りました。

元記事を表示

Deviseで複数のモデルのログイン機能を実装する時のお話

# Deviseで複数のモデルでログイン機能を作る場合の実装の仕方
今回は皆様おなじみdeviseで複数のモデルでのログイン機能の実装ということですが
わかりにくいので簡単に言うと
「ユーザー側のログイン機能」と「お店側のログイン機能」別々に作りたい、ということです。
今回作成するアプリ内で、お店側は商品を出品したりする機能。ユーザー側は商品を購入したりする機能と
やりたいことをわけたいため、ログインの段階から分けておきたい、ということです。
最初は全くわからなかったのですが意外にすんなりと実装できましたので困っている方はこちらをご覧ください

やることとしては
1, deviseのインストール
2, deviseのコマンドで複数のモデルを作成
3, それぞれのモデルに対応するdeviseのコントローラーを作成、編集
4, ルーティングを編集
5, それぞれのモデルのビューファイルを作成

細かいやることはのちに記述していきます。では一つずつ見ていきましょう

## Step1 まずは普通にdeviseをインストール
正直ここに関しては今回割愛させていただきます
gemfileにd

元記事を表示

[SQLite3 + ruby] テーブル名とカラム名を取得する

SQLite3をターミナルから操作すればテーブル名やカラム名は取得できます。
SQL文も調べればすぐ出てきますから、覚えるかメモしておけば問題はないでしょう。
ただ、もう少しお手軽にdbの中身を知りたいと思い、rubyで組んでおきます。
そうすることで、SQL文を忘れてもファイルの移動と実行だけなので楽になるかなと思いまして。

## 準備(rubyでSQLite3を扱う)
rubyでsqlite3を操作するためにデータベースオブジェクトを取得します。

“`ruby
db = SQLite3::Database.new(‘ファイル名.db’)
“`

このオブジェクトに対して .execute(sql) で操作します。

“`ruby
db.execute(xxxxxx)
“`

xxxxxxのところにSQL文が入ります。

## テーブル名の取得
SQLでは下記の文でテーブルについての情報を取得することができます。

“`sql
SELECT * FROM sqlite_master
“`

rubyでは下記のようになります。

“`ruby
tbls_info

元記事を表示

Ruby問題 アウトプット

3つの数値の合計を出力するメソッドを作りましょう。
ただし、同じ数が含まれている場合は、
合計にカウントされません。
下記は、数値が1と2と3の場合の内容です。

“`rb
def lone_sum(ary)
uniq_nums = []
ary.each do |num|
count = 0
ary.each do |i|
if num == i
count += 1
end
end
if count < 2 uniq_nums << num end end sum = 0 uniq_nums.each do |unique_num| sum += unique_num end puts sum end lone_sum([1, 2, 3]) ``` 下記が解説です。 ```rb def lone_sum(ary)   #aryの中身は1,2,3です。 uniq_nums = []      #uniq_numsが空の状態です。 ary.e

元記事を表示

OTHERカテゴリの最新記事