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

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

Uncaught Error: Cannot find module ‘bootstrap-form’と出た場合はコメントアウト

自分用忘備録
### 環境
* macOS Catalina
* ruby 2.6.6
* Rails 6.0.3.2
* gem ‘bootstrap_form’
* Google chrome

管理者一覧画面から管理者を削除
すると以下のエラーがブラウザ上に出現。

>Unknown action
The action ‘show’ could not be found for Administrator::AdminsController

と出る。
destroy actionのはずが何故show??

controller,view,pathの確認をするも異常なし。

web developer consoleでerror logを確認すると、

“`
Uncaught Error: Cannot find module ‘bootstrap-form’
at webpackMissingModule (application.js:1)
at Module../app/javascript/packs/application.js (applicatio

元記事を表示

【Ruby】実は理解できてないかも?【classとmoduleの違い】

こんにちは市原です。

以前

「Railsで作ったアプリでよく使う**自作メソッドを別ファイルにまとめて、必要ところで使いたい**けど、やり方が分からぬ…」

といったことがありました。
意外と分かっているようでわかっていなかった**classとmodule**、せっかくなので記事にまとめてみました。

## calssとモジュール

ざっくりまとめるとこのようになります。

||特徴|使用方法|継承|インスタンス|優位性|
|:-:|:-:|:-:|:-:|:-:|:-:|
|**class**|データやメソッドをまとめたもの|requireでファイルを読み込んでから継承しインスタンスメソッドとして使用|〇|〇|継承を使って複数のクラスをまとめるため、フレームワーク的な使い方ができる|
|**module**|メソッドや値のみをまとめたもの|reequireでファイルを読み込んでからinclude,extendで使用|✖|✖|データをまとめて必要個所で使用する、パーツとして使用|

## class

classは継承やインスタンスの生成を通じてより広い範囲のオブジェクトに影響

元記事を表示

テーブルのデータが全て表示されてしまう問題の解決

現在ウェブエンジニアに転職するための個人アプリを作っています。
個人アプリ開発中に生じたエラーを解決できずに困っています。

##起きている問題
投稿だけを表示したいのに、テーブルに入れた情報が全部ブラウザ上に出てきてしまっているので消したい。
![スクリーンショット 2020-05-25 22.13.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547640/a0451ddd-316e-01a7-d7b3-097fbf1ceb5a.png)

“`ruby
= @posts.each do |post|
“`
この部分をコメントアウトしたら消えたので、ここの記述と関係しているようです。

# 解決方法
“`ruby
# before(表示される)
= @posts.each do |post|
# after(表示されない)
– @posts.each do |post|
“`
Rubyでは`=`だと表示されて、`-`だと表示されない設定でした。
答えは単純でした。。。

元記事を表示

[Rails]初学者によるRubocopの導入

# はじめに
Rubocopとは、Rubyの静的コード解析ツール。
[ruby-style-guide
](https://github.com/rubocop-hq/ruby-style-guide)に従って、ソースコードの修正・改善点を指摘してくれます。

また、インデントのずれや、不必要なスペース・改行などは特定のコマンドを打つことで自動で修正してくれるので、自分にとってはもちろん、他の人が見ても読みやすいコードに整形することが出来ます。
※あくまで初学者の観点で設定等を決めています。

# 導入

“`ruby:gemfile
gem ‘rubocop’, require: false
“`
“`:ターミナル
bundle install
“`

# 使ってみる

“`:ターミナル
bundle exec rubocop
“`
実行すると、以下のような出力が得られます。
スクリーンショット 2020-07-10 8.06.47.pnglocalhost:3000がESETで遭難した

#tl; dr

– 初めてRailsのサーバーを立ち上げたが、`localhost:3000`にまずアクセスできない
– ESET(セキュリティソフト)のパーソナルファイアウォールが悪さをしているらしい
– `localhost:3000`の替わりに`127.0.0.1:3000`でアクセスできた

######参考にしたサイト
[eset を入れた mac で、 [::1] で開発中ウェブアプリケーションに接続できないのは何故?]
(https://ja.stackoverflow.com/questions/66740/eset-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F-mac-%E3%81%A7-1-%E3%81%A7%E9%96%8B%E7%99%BA%E4%B8%AD%E3%82%A6%E3%82%A7%E3%83%96%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%8

元記事を表示

基礎から学ぶ 人工知能の教科書 第3章 章末問題

# はじめに
機械学習の勉強として、「*[基礎から学ぶ 人工知能の教科書](https://www.ohmsha.co.jp/book/9784274224263/)*」 を読んでいます。

この本の特徴は、章末問題に`Python`の簡単なプログラムが載っていてるところです。

ここでは、それを`Ruby`にて写経しています。
# 第3章 章末問題
“`kneighbor.rb
itemdata = [[30, 50, ‘A’], [65, 40, ‘B’],
[90, 100, ‘A’], [90, 60, ‘B’],
[70, 60, ‘B’], [40, 50, ‘A’],
[80, 50, ‘B’]]

print ‘分類対象の高さを入力してください:’
h = gets.to_i
print ‘分類対象の上部表面積を入力してください:’
a = gets.to_i

print itemdata.sort_by{|x, y, _| (x – h) ** 2 + (y – a) ** 2}
“`
k近

元記事を表示

Nokogiriのcssセレクタでコロン(:)、namespaceを含むタグを指定する方法

NokogiriのCSSセレクタでコロン“:“、“namespace“を含むタグを指定するには、コロン“:“をパイプ“|“に変換する。

“`ruby
doc.css(“namespace|tag”)
“`

元記事を表示

rails testができなくて立ち止まった話

結論として、Tera Termを再起動したら直りました。

【環境】
メインOS:Windows 10
仮想環境:Vagrant、VirtualBox、TeraTerm(ver.4.99)

Railsチュートリアルの第6章を学習中に起きたこと。
rails testを実行しようとすると下記の指示が発生。

[vagrant@localhost sample_app]$ rails test
Running via Spring preloader in process 14722
Migrations are pending.
To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=test

指示のとおり実行してみるも特に何も表示されず、その後テストを実行するも同じ内容となる。

[vagrant@localhost sample_app]$ bin/rails db:migrate RAILS_ENV=test
[vagrant@localhost sample_app]$ rails test
Runni

元記事を表示

Rubyのメソッドについて

# プログラミングの勉強日記
2020年7月10日 Progate Lv.165

#メソッドとは
 複数の処理を1つにまとめたもの。`def メソッド名`と`end`の間にまとめたい処理を書くことでメソッドを作成できる(=定義する)。
 メソッドの呼び出しはメソッド名を書くことで行う。

“`ruby:index.rb
def introduce
puts “Hello World”
end
#メソッドの呼び出し
introduce
“`

“`:コンソール
Hello World
“`

#引数
 引数はメソッドに与える情報追加みたいなもの。`def メソッド名(引数)`で引数の指定ができる。引数を渡してメソッドを呼び出すには`メソッド名(値)`とする。

“`ruby:index.rb
def introduce(name)
puts “こんにちは”
puts “#{name}です”
end
introduce(“田中”)
introduce(“山本”)
“`

“`:コンソール
こんにちは
田中です
こんにちは
山本です
“`

(1分で決める)empty?とblank?とpresent?の使い分けについて

(備忘録)説明最小限にしてすぐ使用できるようにまとめた。(結論)blank?かprresent?をどっちか覚えとけば何とかなる。

## empty?を使う時は
**下記の条件を満たしたうえで中身が空であるか知りたいときに使用。**
①必ず入れ物が存在していること
②中身が数字やtrue,falseでないこと

“`ruby
if box.empty?
“`
①②を満たさない場合は NoMethodErrorが生じる。

## blank?を使うときは
**中身が空orそもそも存在しているかを知りたいときに使用**

“`ruby
irb(main):001:0> box = nil
=> nil
irb(main):002:0> box.blank?
=> true
“`

## present?を使用するときは
**存在していてかつ中身が空ではないことを知りたいときに使用(!blank?と同義)**

“`ruby
irb(main):006:0> box = nil
=> nil
irb(main):007:0> box.present?
=> false

TECH CAMP学習 個人アプリ作成②

# deviseを使用して、ユーザーモデルを作成

個人アプリ作成でdeviseのインストールを行いました。
まずはGemfileに下記を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613470/95bbc057-aea7-1238-d075-df862621ea68.png)

ちなみにdeviseは日本語で**「工夫する、考案する、案出する、発明する」**という意味だそうです。

次にターミナルにて
『bundle install』
『rails g devise:install』
『rails g devise user』

を順番に実行します。

そしてマイグレーションファイルを以下2点のように編集します。
※注意 #は省いていただいて結構です。
**① null:falseは空の状態での保存を防ぐ為に使用します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

Rails Active Recordってなんなんだよ。

Active Recordとは、Ruby on Railsで直接SQLを記述することなくデータベースに存在しているデータを扱えるようにするRuby on Railsの機能らしい。

DBからデータを検索する際に、このActive Recordとかいうのを使うらしい。
これを理解して、使いこなせるようになればレベルアップできる気がする:fist:

例えば、Active Recordにはこのようなものが存在する。

all
find
find_by
first
where
pluck
order
distinct
select
group
joins
having

覚えられそうにないけど、頻繁に使うものは多分そのうちRailsを使っていれば無意識のうちに覚えると思っている。

find_or_create_by

#find_or_create_by

引数の条件に指定するデータがあった場合はそのデータを返します。無かった場合は新規作成します。

“`ruby

def find_or_create_by(attributes, &block)
find_by(attributes) || create(attributes, &block)
end
“`

##メリット
結果が冪等になる。
冪等とは何度行っても得られる結果が等しいこと。

すでに指定するデータが存在した場合は新規作成をしないので、
find_or_create_byを繰り返したとしても、得られる結果が等しいです。

対してcreateメソッドだった場合は、
繰り返した分だけ新規作成が行われるので冪等ではないと言えます。

RailsとAjaxを使ったいいね機能の非同期通信

転職活動用に個人アプリを開発中です。
今回、RailsとAjaxを使って、いいね機能の非同期化を行いました。

AjaxではjQueryを使うため、jQueryを使えるようにしておく事前準備が必要です。それは[参考記事](https://qiita.com/__tambo__/items/45211df065e0c037d032)を見てください。以下の記述はそれが設定済みのうえでの話です。

![PFCMASTERいいね機能Ajax.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547640/5d1432fd-7fc2-5870-92db-031410b5f21e.png)

### 実現した機能
・「いいね」ボタンを押すとリロードせずに「いいねを取り消す」に表示が変わる
・「いいね」ボタンを押すとリロードせずにlikesテーブルにデータが1つ追加される
・「いいね」ボタンを押すとリロードせずにいいね数が1つ増える
※その逆もしかり

# このコードでうまくいきました

### コントロー

Digdag公式ドキュメントからDigdagを学ぶ-アーキテクチャ

##目次
[Getting started](https://qiita.com/amagasu/items/92ad70c33f73ab613d08)
Architecture
Concepts
Workflow definition
Scheduling workflow
Operators
Command reference
Language API -Ruby
REST API
Internal architecture
Release Notes

## Digdag Architecture
### Automating workflow with Digdag
ワークフローは手動の動作を自動化します。
一連のタスクをワークフローとして定義します。
Digdagは実行し続けます。タスクはオペレータープラグインを使用して定義されるため、中央のワークフローエンジンから多数の種類のシステムをコントロールできます。

プラグインのランタイムフレームワークとして、Digdagはワークロードの自動化に関する残りの問題を処理し、自動化に集中できるようにします。
タスクが失敗した場合、Di

Digdag公式ドキュメントからDigdagを学ぶ-Getting started

#Digdagについて
DigdagはOpenソースのマルチクラウドワークフローエンジンの事です。
簡単に言うとなんなかの仕事を順序に処理する流れを手伝ってくれるツールかと思いました。

## 目標
Digdagについての本などがないためDigdagの公式サイトのドキュメントを翻訳しながらQiitaに整理したいと思います。
http://docs.digdag.io/architecture.html
ドキュメントは英語になっています。
低い英語力から小学生レベルの日本語に翻訳しながら勉強するので誤訳などあると思います。
今日はGetting Started部分からやります。
DigdagのRubyを使ってRailsにバッチを作るまでが最後の目標になります。

##目次
以下のような内容になります。
[Getting started](https://qiita.com/amagasu/items/92ad70c33f73ab613d08)
[Architecture](https://qiita.com/amagasu/items/572075dcc8b3c8640072)
Conc

【徹底解説】初心者必見の関数(メソッド)の理解の仕方

元の投稿

https://wp.me/pakwHz-cr

プログラミングの入門をする上で最も大事と言っても過言ではない関数またはメソッド(以下、どちらも関数と呼びます)

皆さんは関数と聞くと何を思い浮かべますか?

一般的には、数学の授業で聞く言葉だと思います。

ではどうして、プログラミングの世界でメソッドの事を関数と呼ぶことになったのでしょうか?

それは数学の関数と概念が非常に似ているからです。

そこで、まずは数学的な関数を見てみましょう。数学アレルギーの人も拒絶せず難しい話はしませんので、読み進めてもらえると嬉しいです。

まず、関数とは何でしょう?

関数とはある任意のxを与えると必ず1つのy(解)を返してくれるものです。ちょっと言葉だけでは難しいですね。

それでは、数学的な関数とは代表的なものに何があるでしょうか?

私が一番はじめに思い浮かべる関数は

“`
y = ax + b
“`
です。これは一次関数と呼ばれるものですがaとbは定数(任意で数を決めれる)ので具体的に

“`
y = 2x + 3
“`

を見てみましょう

Enumの設定ミス。なぜかEnum指定の列からデータが取れない…

### 発生した背景
※備忘録として記録します(ネタ的にはしょぼいです…)
以下のようなモデルにEnum設定したとき、データが取り出せない。

“`ruby:table.rb
class ColorManage < ApplicationRecord enum color_type: { single: 0, double: 1, graphic: 2 } (省略) ```` (前提)singleというラジオボタンを押すと、0が入力されるようにする。 ```erb:color-edit.html.erb
<%= color_manage_record.radio_button :color_type, :single ,class:"color-form__button" %>
<%= color_manage_record.label :color_type, "single-color", {class: "color-form__tag"} %

Timeオブジェクトの次の値ってどうやってだすのが正しい?

## 概要

RubyでTimeオブジェクトを扱ってると境界問題にぶち当たる。
普通にやってるとRangeオブジェクトなりを使ってそこまで問題になることはないが、普通じゃないやり方をしていて躓いた。

## 環境

Ruby: 2.6.2
Rails: 5.1.2

## そもそもハマった問題

“`ruby
Time.now.end_of_day
=> 2020-05-15 23:59:59 +0900
“`

これの次の値を取りたい。
※ end_of_dayはわかりやすいから使ってるだけであって、とある日の先端、終端が欲しいわけではない。飽くまでもTimeオブジェクトの次の値

真っ先に思いついたのがこれ

“`ruby
Time.now.end_of_day + 1
=> 2020-05-16 00:00:00 +0900
“`

ただ、これは間違い

“`ruby
(Time.now.end_of_day + 1).iso8601(3)
=> “2020-05-16T00:00:00.999+09:00”
“`

`+ 1` は飽くまでも1秒加算であって、次の値に

Rails5でECサイトを作る⑥ ~seedデータ投入~

# はじめに
架空のベーカリーで買い物できるECサイトを作るシリーズ、[Rails5でECサイトを作る⑤](https://qiita.com/GreenFingers_tk/items/cd8535744f79e22234db)の続きです。
この後の実装を続けていく上で、初期データを入れておいた方が何かと都合が良さそうなので、一旦そちらを優先することにしました。

# 複数のseedファイルを管理する
あくまで表示が正しくできるか確認するためのデータなので、最小限作っておけば良いと思います。しかし、Model数が多い分、やはり一つでファイルで全て済まそうとすると記述量が膨大になってしまいます。
そこで、新たにseedsというフォルダを作り、その中に各Model毎の初期データを入れることにしました。(一つのseeds.rbファイルで済ませたい人は[こちら](#データをまとめて作成))

“`
$ cd work/fumizuki/db
$ mkdir seeds
$ cd seeds
$ touch customer.rb
$ touch address.rb
$ touch gen