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

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

【初心者向け】form_forヘルパーメソッド

##はじめに
Railsチュートリアル7章あたりからコードが段々と難しくなり、特にform_forヘルパーメソッドについては中々わからなかったので自分なりに調べて解説してみます。

##form_forヘルパーメソッド

ヘルパーメソッドとはViewをよりシンプルに重複を少なく書くためのメソッドです。

その中でもform_forヘルパーメソッドはRailsでフォームタグを簡単に作成することができるメソッド。実際には以下のようなコードを書いて使用します。()は省略することができます。

“`erb:◯◯◯.html.erb
<%= form_for(モデルクラスのインスタンス) do |f| %>

 フォームの中身

<% end %>
“`

Railsチュートリアルの7.2ユーザー登録フォームを例にとります。

form_forの引数にはモデルクラスのインスタンスを入れるということなのでコントローラで@user変数を定義します。

「モデルクラスのインスタンス」とは保存したいテーブルのクラスのインスタンスという意味です。

ユーザー登録する際にはもちろん「usersテーブル」

元記事を表示

浮動小数点数の非正規化数の存在意義と特徴

先日、浮動小数点数の非正規化数と絡む機会があった。
で、非正規化数のことをよく知らなかったので調べた。
せっかく調べたのでメモを書いておく。

# はじめに

まあ、ふつうの環境の C / C++ の `double` 、ふつうの環境の ruby の `Float` 、いわゆる倍精度のことを念頭に。

以下、IEEE754 の 倍精度のみが唯一の浮動小数点数であるかのような感じで文章を書くけどもちろん本当はそうではないのでご注意を。

よく、C/C++ の `DBL_MIN` に

> double型の浮動小数点で表現できる正の値の最小値

などという説明が付与されているけど、これは間違っている。実際

“`c:c
#include
#include

int main(void) {
printf(
“DBL_MIN=%e DBL_MIN/10=%e DBL_MIN/1000=%e”,
DBL_MIN,
DBL_MIN/10,
DBL_MIN/1000);
return 0;
}
“`

“`text
DBL_

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder ARC 098 C 累積和

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Regular Contets C – Attention](https://atcoder.jp/contests/arc098/tasks/arc098_a)*
Difficulty: 641

今回のテーマ、累積和
# Ruby
入力例 2 の`WEWEWEEEWWWE`を考察しますと、`WEWEWEEiWWWE`となり`i`の左側の`W`の個数と右側の`E`の個数の合計が求める人数となります。
文字列の左`0`から右`n-1`に向かって、`E`は単調減少、`W`は単調増加ですので、計算量を抑える手法として**累積和**を使用します。

“`ruby.rb
n = gets.to_i
s = gets.chomp

元記事を表示

shoulda-matchersを使ってwhere.not条件のテストはできるのか?

### はじめに
最近shoulda-mathcersを使ってテストをすることが多くなってきました。
個人的には短くテストが書けるのですごく気に入っております。
その中で、???と思うことがあったので記事にしました。

### 本題
例えばhoge.rb(モデル)にこんな記述があったとする。

“`ruby:hoge.rb

has_many :user_companies, -> { where.not(user_id: nil)
“`

where条件のみなら下のように普通は書けると思います。

“`ruby:hoge_spec.rb

describe ‘relations’ do
it {
expect(subject).to have_many(:user_companies)
.conditions(user_id: nil)
}
end
“`

でもwhere.notはどうやってテストしたらいいのか結構悩みました。
理由としては、公式のGitHubのソースコードにも載っていなかったからなんですね…

【GitHubのソースコード】
ht

元記事を表示

Rails でクッションページを作る

# なにこれ
[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版](https://www.sbcr.jp/product/4797393163/)という本の p.239 に「コラム:クッションページ」というのがある。Rails でこのクッションページを作ったらどうなるかな、と思って作成することにした。

# コードについて
– 今回のコードは [Github のレポジトリ](https://github.com/seahal/qiita) にもあります
– slim という gem を使っています

# さて、作っていきますか
とりあえず、コントローラーをつくる

“`sh
$ rails g controller confirmation_of_external_pages show
“`
ルーティングはこんなかんじ

“`ruby
Rails.application.routes.draw do
resources :confirmation_of_external_pages, only: [:show]
end
“`
コントローラーはこんな感じ

元記事を表示

Rubyでチンチロゲームを作る  第1回 全体の仕様決定と役判定まで

#1.はじめに
 Rubyって楽しいですね。独特の言い回しはあるけれど、ささっと書けるのが素敵です。今回は自分がどこまでRubyを理解しているのかを知るために、なにかつくってみることにしました。チンチロゲームです。

#2. チンチロとは?
 サイコロをつかった賭博ゲームです。サイコロ3つを振り、出た目で役が決まります。親を交代しながら、掛け金が移動していきます。私はカイジでこのゲームを知りました。

 チンチロゲームを作ろうと思ったのは、適当な難易度だと思ったからです。カードゲームのようにマークや残数を考えなくていいし、手札を表示させる必要もありません。

 ※ピンゾロサイやシゴロサイは出ません。

#3. 全体の仕様決定
##3-1. ルール
 ルール/役はカイジの地下チンチロを適用します。勝敗は自分で適当に
http://ketto.com/zw/tintiro_rule.shtml

##3-2. ゲームの流れ
 1. 親決め
 2. 掛け金決定
 3. サイコロを振り役を決める(親が最初、子も振る)
 4. 役に応じて掛け金の移動
 5. 掛け金が0になったら負け もしくは

元記事を表示

ENOENT: no such file or directory… のエラーが出てcloud9でブラウザを開けない問題

cloud9でRails環境を使っていたのですがrails serverを起動した後にWebページをcloud9のブラウザで参照できなくなってしまいました。
こういうエラーが出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609861/be9b5cd6-6918-35ec-85a7-a4d7b5f9f791.png)

cloud9からブラウザを起動するには、まずは`Preview`から`Preview Running Application`を開いて、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609861/b1fb2b25-74de-744e-7bff-659b9fe4ac93.png)

`Pop Into New Window`のアイコンをクリックすると新しいWindowにページが表示されます。
![image.png](https://qiita-image-sto

元記事を表示

Oracle VirtualBox の Ubuntu 20.04 LTS 仮想環境上に Ruby on Rails 開発環境を構築する

#はじめに
Windows で Rails アプリケーションの開発環境を構築する方法はいくつかあります。

(参考) WindowsにおけるRubyやRailsの環境構築方法をいろいろ調べてみた(2017年3月版)
[https://qiita.com/jnchito/items/9de9e515f82dc1969cc5](https://qiita.com/jnchito/items/9de9e515f82dc1969cc5)

ここでは Oracle VirtualBox の Ubuntu 20.04 LTS 仮想環境に Ruby on Rails 開発環境を構築する手順を記述します。
この方法は以下のメリットがあります。
* Linux 環境で Rails を動かすため、ネット上に情報が多い
* 環境の再構築が容易(どこかでうまくいかなくても最初からやり直せる)
* 仮想ディスクイメージを USB メモリ等で持ち運ぶことができ、複数の PC にて同じ環境が使える(ただしポータブルメディア上でそのまま動かすには、USB 接続 SSD などランダム書き込みが高速でないと実用は難しそう

元記事を表示

Railsチュートリアル RDB,RDBMSについて調べる

##はじめに
Railsチューリアルを進めている中で、リレーショナルデータベースとかSQLiteとかPostgreSQLとか全然分からなかったので調べてみました。データベースって一個じゃないんかい!自分のメモ用に記事を書いてみました。

##リレーショナルデータベース

リレーショナルデータベースとはデータを表形式(エクセルを想像してもらえるとわかりやすい)として管理するデータベース管理方式のこと。

| TH | TH | TH |
| :— | :—: | —: |
| TD | TD | TD |
| TD | TD | TD |

RDBと略されることが多いです(Relational DataBase)。

表の行(横)を「レコード」、表の列(縦)を「フィールド」と言います。表そのもののことを「テーブル」と呼びます。

複数のテーブルを関連付ける(くっつける)こともできます。

##RDBMS
RDBMSとは【Relational DataBase Management System】の略で、先述したリレーショナルデータベースを管理するための専用のソフトウ

元記事を表示

Ruby 2.7 のキーワード引数と配列展開と send を組み合わせると warning が出ない

Ruby 2.7 でキーワード引数とハッシュが自動変換されるときに警告が出るようになった。キーワード引数は `def m(a:); end` みたいに引数に名前をつけて渡す機能。仮引数に `**` をつけるとキーワード引数の残りをハッシュとして受け取れる。

“`ruby
# kw1 は必須のキーワード引数、 kwrest はkw1 以外のキーワードがハッシュ形式で受け取れる。
def a_method(kw1: 1, **kwrest)
puts “kw1: #{kw1}”
puts “kwrest: #{kwrest}”
end
a_method(kw1: 42, kw2: 4242)
# kw1: 42
# kwrest: { kw2: 4242 }
“`

キーワードはどうみてもハッシュだからハッシュだと思っていたんだけど、 2.7 でハッシュとキーワードを区別するようになった。`{}` をつけて明示的にハッシュとして渡すとwarningがでて怒られる。

“`ruby
a_method({ kw1: 42, kw2: 4242 })
# (irb):5: war

元記事を表示

masterをpull出来ない。

#出来事
`master`を最新にするために、`pull`しよとしたら出来ない‥

`master`にブランチ移動する際、ターミナルに、

“`
Your branch is behind ‘origin/master’ by 23 commits, and can be fast-forwarded.
(use “git pull” to update your local branch)
sekishinya@mba gyakuten_clone_group13 % git branch
“`

のように表示されますが、**masterブランチでコミットしてはいけません**。

`commit`しても`push`できなくしていますが、履歴がおかしくなります。

#解決策

何か変更があるかどうか、状態を確認する。

“`
git status
“`

それで何かが表示されたら、一旦`stash`で一時保存する。

“`
git stash
“`

そうすれば差分がなくなり`pull`できます。ブランチを切った後に反映をしたい場合は次のコマンドでOKです。

`

元記事を表示

覚えたことはすぐに使いたくなる習性を活かして三項演算子・重複の削除使ってみた

##はじめに

こんにちは、本日もAtCoderの解答を書き残して行こうと思います。

本日は、先日勉強していた時に出てきた解答うまく使って解けたので、
そちらを紹介して参ります。

##どんな問題を解いたか

私が今回解いた問題は、
「**0~9までの数字が3つ与えられ、それらのうち2つが同じであるかいなか**」を求める問題でした。

##私の解答
早速ですが、私の解答は以下のようになりました。

“`sample.rb
a,b,c = gets.split(‘ ‘).map(&:to_i)
puts [a,b,c].uniq.size == 2 ? ‘Yes’ : ‘No’

“`

こだわりポイントとしては、
1.a,b,cを[]で囲うことで配列にしているところ
2.a,b,cの重複をuniqで確認しているところ
3.三項演算子を使って出力文字を制御しているところ
です。

1に関しては、別に分けなくても1つの配列にしてしまえばよかった気もしますが、
問題に乗っ取って再現しました。

また、普段は結構if文で条件分岐して書いてしまいますが、
今回は三項演算子ですっきり書くこと

元記事を表示

Rails Tutorial メモ

# 第1章
Bitbucketへのリポジトリ追加とリポジトリへのプッシュに関して、
git remote add origin git@bitbucket.org:ユーザー名/hello_app.git
のコマンドを打つ際に、ユーザー名を間違えた⇨「作成したORIGINを消したい」
`$ git remote rm origin`

ローカル環境のプレビューが表示されなくなった場合の対処
ディレクトの移動
`$ cd hello_app`
下記コマンドを実行しプレビュー
`$ rails server -b $IP -p $PORT`

元記事を表示

【開発ログ③】初心者がデータベースの設計をしたらこうなったよ。

# 前提について
はじめまして、いりふねと申します。
現在プログラミングスクールにてアプリケーション開発の勉強をしております。32歳独身A型、さそり座です。

この記事は、スクールの課題である個人開発アプリの記録であり、私自身のアウトプットの場として設定しております。未熟な点も多いと思いますが、見かけてくださった方にどんどん指摘をしてほしいと思っております。

作成するのは、有給休暇管理ツールです。
概要説明は[こちら](https://qiita.com/iczo32/items/97ad7d4baa985b3b99ca)。

また、開発するアプリケーションについては、実際にデプロイまでは行う予定ですが、サービスとしてリリースするわけではありません。アプリケーションの性質上、高いセキュリティを求められるものであり、短期で仕上げるようなものではないと思っているからです。完成品には「注意書き」も入れようと思いますが、くれぐれも完成品を見かけても個人情報を書き込まないで下さい。

では、本題へどうぞ。

# 仕様書の続き
[前回](https://qiita.com/iczo32/item

元記事を表示

マニフェストファイルは何をどうしているのか?

#はじめに
マニフェストファイルについて学習したので、忘備録として残しておきます。

Q.マニフェストファイルは何をどうしているのか?

A.ブラウザ表示を効率的に行うために、個々のアセットを結合し、アセットパイプラインに伝えている

#アセットパイプラインのなかで役割を担う存在
アセットパイプラインとは、開発者の作成したJavaScript、CSS、画像などのアセットを効率的に扱う仕組みのことです。sprocket-railsというgemのなかのSprocketの機能で、デフォルトで有効になっています。

アセットパイプラインでは、それらのリソースをブラウザで表示するのに最適な状態へと処理します。
具体的には、高級言語のコンパイル、アセットの連結、アセットの最小化、ダイジェストの付与などが処理されます。(ダイジェストの付与が、どのような恩恵をもたらすのかはまだ経験していません、、、)

#アセットの連結されたファイルを`layouts/application.html.erb`が読み込む
アセットパイプラインの、アセットの連結、の部分を担うのがマニフェストファイルです。つまり、どのフ

元記事を表示

kmyacc を Fork しました(偉大な先人に敬意を込めて)

# kmyacc

Fork しました。

* https://github.com/Kray-G/kmyacc-forked
* Fork 元はこの方のリポジトリです。
https://github.com/moriyoshi/kmyacc-forked
* リポジトリを残しておいてくださってありがとうございます。

## 修正

Fork 元から以下の修正をしています。

* README.md ファイルの追加。
* Windows 用の Makefile を追加。
* Visual C 向け Warning 抑止用の修正。
* 64bit 対応。

## 適用

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。

晴れて Bison から kmyacc に移行。

## さいごに

間違いなく日本で最高のエンジニアの 1 人だった森公一郎氏の足跡が、少しでも残りますように。。。

元記事を表示

2020/05/08(金)Day7

###デイリードリル

– Rubyでの2乗の表現

“`ruby
def square(number)
return number **2
end
“`
“`ruby

side_length = 5
puts(“1辺が#{side_length}センチの正方形の面積は#{square(side_length)}㎡です”)
“`
→変数を定義して、前に定義した関数にその変数を代入。

元記事を表示

resourcesメソッドでrailsのルーティングを設定しよう

#resourcesメソッドでrailsのルーティングを設定しよう
railsで定義されている7つのアクションのルーティングを自動で作成するメソッドです。
resourcesメソッドは簡単にルーティングを設定できます。
#resourcesメソッドで定義される7つのメソッド

index:リソースの一覧を表示させる
show:リソースの詳細を表示させる
new:投稿フォームを表示させる
create:リソースを追加させる
edit:更新フォームを表示させる
update:リソースを更新させる
destroy:リソースを削除する

これらを設定することでアプリを作ることができます。
##resourcesメソッドの使い方
resourcesメソッドはルーティングを記述するroutes.rbの中で使用します。

“`routes.rb
Rails.application.routes.draw do
resources :コントローラー名
end
“`
このように記述します。

##resourcesメソッドをアクションを指定して使用する方法
onlyとexceptを使用するとアク

元記事を表示

Railsチュートリアル 12章 リスト11.29のテストでエラーが出る

##エラーメッセージ

“`terminal
ERROR[“test_password_resets”, PasswordResetsTest, 0.9276049650002278]
test_password_resets#PasswordResetsTest (0.93s)
NoMethodError: NoMethodError: undefined method `reset_sent_at=’ for #
Did you mean? reset_token=
app/models/user.rb:63:in `create_reset_digest’
app/controllers/password_resets_controller.rb:12:in `create’
test/integration/password_resets_test.rb:18:in `block in

元記事を表示

[Rails] application.scssのrequire_tree .に関して

# はじめに
“rails new”を実行して得られるファイルにapp/assets/stylesheets/application.scssってありますよね。

これまで学習したきた中で

“`ruby
*= require_tree .
“`

の存在は知っていて、この記述があることで、stylesheetsディレクトリ内にある、scssファイルを読み込んでくれている、という認識でした。

それは間違いではないのですが、ある問題がおこって、あれ?ってなった

# scssファイルが読み込まれて、、ない、、??

問題が起きたのは、以下のようなコードを書いた時です。

“`ruby
# application.scss

/*
* This is a manifest file that’ll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/asse

元記事を表示

OTHERカテゴリの最新記事