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

Ruby関連のことを調べてみた2020年01月27日
目次

Railsチュートリアル 第7章

#デバッグ
###debugメソッド
debugメソッドとparams変数を使い、各ページにデバッグ情報が表示されるようにする。

“`html:application.html.erb


.
.
.

<%= render 'layouts/header' %>

<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>  ⇦ここに追加



“`

Railsにはテスト環境(test)、開発環境(development)、本番環境(production)の3つのデフォルト環境が用意されている。
上記では、開発環境にのみデバッグ情報を表示されるようにしている。

###debuggerメソッド
上記ではdebugメソッドを書きましたが、もっ

元記事を表示

【Rails】bootstrapでページネーション機能を作成する

##gemのインストール

“kaminari“のgemをインストールします。

“`ruby
gem ‘kaminari’
gem ‘kaminari-bootstrap’, ‘~> 3.0.1’ #bootstrap3用
“`
“`terminal
$ bundle install
“`
インストール後、サーバーを再起動します。

##ymlファイルの作成

“config/locales“に“kaminari_ja.yml“を作成し、以下を記載します。

“`kaminari_ja.yml
ja:
views:
pagination:
first: “« 最初”
last: “最後 »”
previous: “‹ 前”
next: “次 ›”
truncate: “…”
“`

##コントローラーの変更
“`ruby
class PostsController < ApplicationController def ind

元記事を表示

FullCalendar 月・週・日カレンダーを表示する方法

# はじめに
FullCalendar という素晴らしい強力なライブラリを見つけました。(とても有名だと思いますが、知りませんでした・・・。)
英語のドキュメントばかりなので、日本語で誰かに役に立てばと思いまとめさせていただきました。

今回は月・週・日カレンダーのそれぞれに切り替える方法をまとめました。

#### 関連リンク
関連リンクを下記に載せておくので、必要であれば参考にしてください。。

* 【Rails】 5分でFullCalendar実装する方法
* https://qiita.com/syukan3/items/68280ce4ff45aa336363

# 前提条件

FullCalendarをアプリケーションに実装済みであること。

Railsアプリケーションで実装ができていない方は上記の記事を参考にしてみてください。
Railsを使ったことがない人でも簡単に実装することができますので、この機会にRuby と Railsをインストールして使ってみてください。

# 実装

javascript に 2箇所ほど追記をすれば実装することができます。

`

元記事を表示

【Rails】sorceryでパスワードリセット機能実装

# 環境
`Rails 5.2.3`
`mysql 5.7.28`
`gem sorcery`
`gem letter_opener`
`gem bootstrap` → フラッシュメッセージ使いたい方は導入してください。

# 準備
sorceryを導入してemail、パスワードログインを実装するところまで行う。
下記記事がわかりやすいです。
[シンプル認証gem sorceryを完全入門するで!!](https://qiita.com/babashunsu/items/9937b0a2e08d318edece#4-letter_opener%E3%81%AE%E8%BF%BD%E5%8A%A0)

# 実装

パスワードリセット申請をするとリセットのためのメールが届いて、メール内のリンクにアクセスするとパスワードリセット画面にとび、パスワードの更新処理を行うという実装をしていきます。

Railsでメールを送るにはAction Mailerを使います。
> Railsはメールを送るためにAction Mailerという仕組みを提供しています。メイラーはコントローラーに似ています。

元記事を表示

【初心者向け】Rubyの引数についてまとめてみました。

#Rubyで使われている引数についてまとめてみました。

参考記事
https://qiita.com/rtoya/items/33617078501776fdcad7

Ruby 2.1.0リリース!注目の新機能を見てみましょう

#初心者の方がおそらく最初に習う引数

“`ruby

#hogeという命令はmsgを出力する
def morning(msg)
puts msg
end
#msgはおはーという文章を出力する
morning = “おはよー”
#hogeを実行する
morning(morning)
“`

仮引数と実引数(本引数)は一緒じゃなくてよかったですもんね。
morning(morning)のカッコでくくってるところのmorningが実引数で
msgが仮引数

私は頭の中でこう考えてます。間違ってましたらご指摘いただけると幸いです・・・・

“`ruby
#仮引数領域がここから〜〜〜
def morning(msg)
puts msg
end
#〜〜〜ここまで

#実引数領域がここから〜〜〜
morning =

元記事を表示

Rails Minitest こんな時どうする?テストクラス毎にfixureを分けたい

# 概要
テストクラス毎にfixureを分けたい。

# 詳細

Minitestではテストデータをfixtureフォルダにyaml形式のファイルで配置しておかなければならない。yamlファイル名はモデル名であり、アプリケーション全体で1モデル=1fixutureファイルが基本である。

しかし、アプリケーションが複雑になってくると1モデル=1ファイルですべてのテストケースを網羅するようなテストデータを用意するのが難しくなることがある。そこでテストクラス毎にfixureファイルを分けることでテストケースを網羅するテストデータを用意し易くする。

# 対応

アプリケーション全体で1モデル=1ファイルを一度に読み込むようになっているのを止める。
それぞれのテストクラスで任意のfixtureを読み込むようにする。

# サンプルコード

サンプルでは2つのテストクラス book_test.rb と user_test.rb があり、それぞれのテストクラスでBookモデルのテストデータを別々のfixtureから読み込む。

アプリケーション全体で1モデル=1ファイルを一度に読み込むように

元記事を表示

【徒然なるままに】2020年最新、WEB技術の勢力図を三国志にしてみた

### 今は昔
一昔前はTwitterのScala/FacebookのReactが猛威を振るっていた時期がありましたが、
イキリ勢力の消耗戦で、最近はVue勢がかなり盛り上がっている印象を受けます。

### かつてのJQuery、それがVue

そんな予感がひしひしとします。

そこで、最新のWEB勢力図を三国志風にしてみました。
三国志の知識はマンガとゲームとWikiです、すみません。

全く知らないキッズは中田さんのYoutube大学をご覧ください。
[【三国志】第一話〜英雄たちの夜明け〜ついに授業リクエストNo.1の超大作](https://www.youtube.com/watch?v=LLvH6Flstz4)

![三国志a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533968/ccda7b9e-3205-7487-038b-3500cd8f0332.png)

### 魏
– 曹操(PHP) … 何でもあり最強、女を侍らせる。
– 夏侯惇(Laravel) … ロマンチスト
– 司馬

元記事を表示

Get News Titles from Google News

Google ニュースの RSS からタイトルを取得します。

“`google_news_title.rb
require ‘rss’

# 検索ジャンル (以下のいづれか)
# WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS,
# SCIENCE, HEALTH
SEARCH = ‘TECHNOLOGY’

def encode_url(url)
URI.encode url.encode(‘EUCJP’)
end

url =
“https://news.google.com/rss/search?q=#{SEARCH}&hl=ja&gl=JP&ceid=JP:ja”

RSS::Parser.parse(encode_url(url), true, false).channel.items.each do |item|
puts item.title
end
“`

# 実行結果
![google_news_title.jpg](https://qiita-image-store.s3

元記事を表示

Prontoを実行するGithub Actionを作った

Ruby でコードを書くときに [Rubocop](https://github.com/rubocop-hq/rubocop) などでコードチェックするのは品質向上に役立つと思う。
[Pronto](https://github.com/prontolabs/pronto) を使って Rubocop を実行すると Github のプルリクエストにコメントとしてエラーを指摘してくれる。
あんまりいい例でないけどこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32533/60610d38-0f2d-d104-e206-21c47865cdb7.png)

チーム開発するときには「不要な改行は取ってください」とかレビューでコメントしなくて良くなるし、1人で開発するときにもうっかりミスを防げて良い(私は1人でも実装中のメモを残すためにプルリクエストを作ったりする)。

自動で実行されないと結局使わなくなっていくので、CIサービスなどで実行していたのだけど、Github Workf

元記事を表示

実務未経験者がUdemyの講座を参考にして、RailsでInstagram風アプリを作ったので感想をまとめます

現在22歳の大学生です。就職先としてweb形自社開発企業を目指し、ポートフォリオ作成と就活を頑張っています。

今回はUdemyの講座を参考にInstagram風アプリを作成したので、感想などを書いていきます。

##参考にした教材

今回はUdemyにある「[Beautiful Ruby on Rails Apps in 30 Days & TDD – Immersive](https://www.udemy.com/course/8-beautiful-ruby-on-rails-apps-in-30-days/)」を使用しました。

こちらの教材はInstagram、Evernote、Tumblrなどの有名アプリを含めた、8つのアプリの作り方をRuby on Railsで学ぶという盛りだくさんの内容です。

しかもこの教材、**無料**です。ただその代わり、教材の内容は2014年ぐらいと少し古いです。
あと解説は英語で日本語字幕などはありません。まあ内容は難しくないので大丈夫です。

##難易度はProgate以上、Railsチュートリアル未満

Railsチュートリアルができる

元記事を表示

Railsのルーティングを支える技術 – Journeyについて

[Journey](https://github.com/rails/rails/tree/master/actionpack/lib/action_dispatch/journey)は、Railsのルーティング処理を担当するライブラリです。Rails3で導入され、大規模なアプリケーションでの処理が高速化しました。

今回は、Journeyがどのようにしてルーティング処理を行っているかを紹介します。

# TL;DR

– Railsのルーターは、ウェブから受け取ったURL(入力URL)を認識し、ルート定義と見比べマッチする処理が見つかればそれを呼び出す
– 入力URLに対応する処理を高速に探すためのライブラリがJourneyである
– Journeyはルート定義を非決定性有限オートマトン(NFA)に変換し、マッチングを行う
– Journeyは以下ステップを踏み、ルート定義をNFAに変換している
1. ルート定義URLを字句解析し、トークンに分解する
2. トークンから抽象構文木(AST)を構築する
3. ASTからNFAに変換する
– Journeyは以下ステッ

元記事を表示

VirtualBox+Vagrantを用いた仮想環境構築を行いHelloWorldを出力するまで

# はじめに
VirtualBox+Vagrantを用いた仮想環境構築を学習したく
ドットインストールをベースにVagrant上のファイルをVisual Studio Codeで編集して
HelloWorldを出力するまでのメモです。

# 目標
VirtualBox+Vagrantにて仮想OSを構築する。
Visual Studio Codeを使用して仮想OS上でファイル作成する。
HelloWorldを出力する。

# 手順
## VirtualBoxをインストール
https://www.virtualbox.org/wiki/Download_Old_Builds_6_0

## Vagrantをインストール
https://www.vagrantup.com/

### vagrant up ができなかった
Vagrantが最新版のVirtualboxを認識していないとのこと
下記記事を参考に設定ファイルを書き換えました。
[[Mac] Vagrant 2.2.6 と Virtualbox 6.1でうまくvagrant up ができなかった時の対処法](https://qii

元記事を表示

各言語で、継承の挙動はかなり違うという話

## はじめに

この記事は、私が色んな言語でひたすら似たようにクラス継承を書いてみて、実際にどんな値が出力されるのかを調査した結果をまとめたものです。時には既知の言語でも「こんな文法あったんだ」と思いながら、時にはHello Worldから頑張りました。

まとめるのが大変だった割に誰得?という内容ですが、同じことが気になった人のために置いておきます。
いやでも新しい発見があるかもしれないのでとりあえず読んでみてください。
意外と面白い結果になったかもしれません。

## 調べた言語

– 静的型付け
– Java (Corretto 1.8.0_232)
– C# (3.4.0)
– C++ (11.0.0)
– Scala (2.13.1)
– Kotlin (1.3.61)
– Swift (5.1.3)

– 動的型付け
– Python (3.7.1)
– Ruby (2.6.5)
– PHP (7.1.32)
– JavaScript (node v12.14.1)

– オプショナルな静的型付け
– TypeScript (3

元記事を表示

gem install ovirt-engine-sdk -v ‘4.2.4’がインストールできない

gem install ovirt-engine-sdk -v ‘4.2.4’をbundle install しようとするとエラーが発生する。

エラー内容

Building native extensions. This could take a while…
ERROR: Error installing ovirt-engine-sdk:
ERROR: Failed to build gem native extension.

currentdirectory:
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/ovirt-engine-sdk-4.2.4/ext/ovirtsdk4c
/home/vagrant/.rbenv/versions/2.4.0/bin/ruby -r ./siteconf20180522-11143-c35v2a.rb extconf.rb
checking for xml2-config… no
*** extconf.rb

元記事を表示

PAY.JPでクレジットカードを登録する方法

プログラミング初心者が備忘録のために書いていますのでご注意ください。
今回はカードの登録ができるようにします。

PAY.JPとは
PAY.JPを使うと簡単にクレジットカード登録ができる。
詳しくはpay.jpのサイトを確認してください。
<[PAY.JPのサイトへ](http://pay.jp)>

## 認証
[PAY.JP](http://pay.jp)のサイトでユーザー登録。
PAY.JPのAPIを利用するには、ユーザー登録を行い、APIページからAPIキーを取得す必要があります。
ユーザー登録するとテスト用キーと本番用のキーが作成されます。
サイドバーのAPIのボタンを押すと下のページに移動します。
今回はテストのみ実装するのでテスト秘密鍵とテスト公開鍵を使用します。
![alt](https://pay.jp/theme/images/platform_apikey_update.png)

## 環境変数に書き込む
秘密鍵はコードに直接書かないので環境変数を設定します。
それぞれのPCによって環境変数の書き方は異なると思いますので注意してください。

“`:ターミナル

元記事を表示

[strong parameters][form_with]投稿にユーザー情報を表示する

#概要
###目的
プロゲート以外の方法(strong parameters)で投稿詳細に投稿主(ユーザー)情報を記載すること。
(ちなみにプロゲートは[こんな感じ](https://qiita.com/akr03xxx/items/6a3f23a53dd887ab26f7))
###実現したいこと
| 各action | すること(ポイント) |
|:—————–|——————:|
| new | from_withを使って、投稿。 |
| create | strong parametersを使用して処理。 |
| show | 投稿にユーザー情報を引っ張ってくる。 |

このような流れで進めていきます。

###完成イメージ
スクリーンショット 2020-01-25 15.47.36.pngRuby on Railsの環境構築やりかた! ver2020

#はじめに
ここまでProgateでRuby on Railsの学習をしてきたが、やはり上のステップに行くためには自分のPCに環境を構築しなければならないと思い重い腰をあげた。
が、これが思った以上にうまくいかず、かなりの時間がかかってしまった。最初Progateを見ながらやってみたがサーバ立ち上げでうまくいかず、ggるといろいろなサイトでやり方を解説してくれているのを見つけたもののどのサイトも書いてあることがばらばらなところがありしかもどれもうまくいかなかった。なぜだ。
結局、Qiita内にある記事(下記参照)を見ながら現在のバージョンにあわせてやってみることでなんとか構築することができた。
ということで、自分が苦難の末環境構築に成功した方法をメモも兼ねてまとめてみた。
#PCの環境
Windows10 64bit
#参考にさせていただいたページ
https://qiita.com/shita_fontaine/items/aa3f762d7afa20c5d42a
https://teratail.com/questions/221381
ほぼこのサイトの通りですが、バージョン等が多

元記事を表示

#Ruby #AWS S3 / upload not UTF-8 ( e.g SJIS ) file / publish presigned url / directly open download file from browser / as text/csv

“`rb
tempfile = Tempfile.new

csv_string = ‘あ,い,う’
File.write(tempfile.path, csv_string, encoding: Encoding::SJIS)

s3_object.upload_file(tempfile.path)
s3_object.upload_file(
tempfile.path,
content_disposition: ‘attachment; filename=”example.csv”‘,
content_type: ‘text/csv’
)

tempfile.close
tempfile.unlink

s3_object.presigned_url(:get, expires_in: 60 * 60)

“`

![image](https://user-images.githubusercontent.com/13635059/73115067-ae31cc

元記事を表示

【Ruby】メソッドの引数は値渡し?参照渡し?

①〜④でreplaceメソッド実行後の変数aの値はそれぞれ何になるでしょうか。この記事ではメソッドの引数と、メソッド呼び出し元の変数について動きを追って見ていきます。

①破壊的メソッドによる変更

“`ruby
a = “hoge”
replace(a)

def replace(str)
str.upcase!
end
“`

②破壊的メソッド実行後、値を変更

“`ruby
a = “hoge”
replace(a)

def replace(str)
str.upcase!

str = “fuga”
end
“`

③配列自体を変更

“`ruby
a = [“hoge”, “fuga”]
replace(a)

def replace(list)
list = [“piyo”, “fuga”]
end
“`

④配列の要素を変更

“`ruby
a = [“hoge”, “fuga”]
replace(a)

def replace(list)
list[0] = “piyo”
end
“`

## メソッドの引数は値渡し?参照渡し?

元記事を表示

[Rails]多対多のモデルの実装、コントローラー、ビューの書き方

# はじめに
Railsで多対多のモデルを作り、コントローラー・ビューを実装しました。過去にもやったことがあったので、できるかなーと思ったら、かなり迷ってしまったので、手順をメモしておきます。

## データベース設計

今回のテーブルはこんな感じ。作品(works)は複数のカテゴリー(categories)をもち、それぞれのカテゴリーにも複数の作品が属しています。

### worksテーブル
|column|type|
|—-|—-|
|id|integer|
|name|string|
|description|string|
|…|…|

### categoriesテーブル
|column|type|
|—-|—-|
|id|integer|
|name|string|

### work_categoriesテーブル(中間テーブル)
|column|type|
|—-|—-|
|id|integer|
|category_id|integer|
|work_id|integer|

ところで、現在、特に中間テーブルに命名規則はないようなのです

元記事を表示

OTHERカテゴリの最新記事