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

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

SequelでPG::ConnectionBad: PQconsumeInput()エラーが出るようになって困った話

# 急に出始めた PG::ConnectionBad: PQconsumeInput() エラー

RailsでActiveRecordを使わずSequelをORMとして使っているのだが、いつからかRails起動直後のRDS(Postgresql)接続時に「PG::ConnectionBad: PQconsumeInput()」エラーが出るようになってしまった。

“`
PG::ConnectionBad: PQconsumeInput() SSL error: decryption failed or bad record mac
PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
PG::ConnectionBad: PQconsumeInput() SSL error: sslv3 alert bad record mac
“`

Sequel側は変えていないのでRDSで何か仕様変更があったのか・・・。RDSのCA証明書の変更の影響かと思ったが、変更する前から当エラーは出て

元記事を表示

Rails deviseの導入〜新規登録、ログイン時のカラム

# 初めに
某プログラミングスクールの卒業生です。
スクールに通う中で学んだことや、つまづいたことを備忘録としてまとめてます。
今回は、deviseを扱う際に必ず調べるであろう、独自カラムの追加方法をdeviseの導入からまとめておきたいと思います。
# 環境
・Ruby 2.5.7
・Rails 5.2.4.1
# deviseの導入
deviseとは、ログインや新規登録機能等を簡単に実装できるgemです。
まず初めに、Gemfileに以下の1行追加して保存します。

“`ruby:Gemfile
gem ‘devise’
“`
次にターミナルで下記を実行し、deviseをアプリケーションに読み込ませます。

“`
$ bundle install
“`

最後にターミナルで下記を実行し、deviseの初期設定を行います。

“`
$ rails g devise:install
“`

“`
Running via Spring preloader in process 29980
create config/initializers/

元記事を表示

Kinx 実現技術 – Yacc/Bison

# コンパイラ・コンパイラの話

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。作ったものの紹介だけではなく実現のために使った技術を紹介していくのも誰の役に立つかもしれないしね。その道の人には当たり前でも、そうでない人にも興味をもって貰えるかもしれないので。ソースを具体的にさらすのは(アドホックにやってる部分もあるので)多少恥ずかしいが、どうせ OSS にしてるし、まぁいいか。

最初のテーマは構文解析。なお、以下のような感じで記事をプランしてみる。

* **コンパイル時編**
* 構文解析 … Bison を使っている。kmyacc に変えるかもしれない。(本記事)
* Switch-Case … 色々条件を判断。結構複雑。
* **実行時編**
* VM(Virtual Machine) … gcc ではダイレクト・スレッディング。
* Garbage Coll

元記事を表示

【Rails】小数点と3桁ずつ区切るカンマ

1234.50

“`ruby
“#{(product.price).to_f}”
=> 1234.5

“#{(product.price).to_s(:delimited)}”
=> 1,234.5
“`

元記事を表示

衆議院の質問主意書データをWebページから集計する

国会に提出された質問主意書データをRubyを使って集計する。

集計に使った元データが必要な方は、[@ts_3156](https://twitter.com/ts_3156)までご連絡ください。データの各種加工もお引き受けいたします。

集計結果は以下の通り。

**国会議員ごとのランキング**

“`
1位 初鹿 明博 20回
2位 櫻井 周 17回
3位 松原 仁 16回
4位 丸山 穂高 16回
5位 城井 崇 8回
6位 早稲田 夕季 8回
7位 下地 幹郎 6回
8位 中谷 一馬 5回
9位 阿部 知子 4回
10位 江田 憲司 3回
11位 山井 和則 3回
12位 森山 浩行 2回
13位 岡本 充功 2回
14位 大河原 雅子 2回
15位 柿沢 未途 1回
16位 山崎 誠 1回
17位 中島 克仁 1回
18位 山内 康一 1回
19位 稲富 修二 1回
20位 青山 大人 1回
21位 関 健一郎 1回
22位 赤嶺 政賢 1回
23位 黒岩 宇洋 1回
24位 亀井 亜紀子 1回
25位 大西 健介 1回
26位 階 猛 1回
27位 奥野 総一郎 1回
`

元記事を表示

RailsエンジニアがDDDやクリーンアーキテクチャに触れるためにとりあえずHanamiを始めてみる

# Introduction

これまで Rails をそれなりにやってきて、ちょっとしたWebアプリならそれなりサクッと作れるようにはなりましたが、 Fat Controller だの Fat Model と言われるようにどこかで臨界点が来て、従来のMVCアーキテクチャとは違う別の設計を模索してみたい欲が出てきました :flushed:

そのとっかりとして、巷で話題の **クリーンアーキテクチャ** に触れるために、 Rails の対抗馬として名乗りを挙げた Ruby 製フレームワーク **Hanami** を始めてみようかと思いました :fire: :fire: :fire:

# Install

まずは Hanami を立ち上げてみます。

“`
$ mkdir hanami-tutorial
$ cd hanami-tutorial
$ bundle init
“`

Gemfile を書き換えます。

“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git

元記事を表示

【13日目】Ruby(配列,ハッシュ)

#はじめに
こんばんは。
Ruby2日目です。
平日の進捗はゆっくりなので、
休みに盛り返していきます。
では、本日のまとめをしたいと思います。

#本日の学び
– progate Ruby2

##Ruby
###配列
“`ruby
languages = [“日本語”,”英語”,”スペイン語”] //インデックスは0,1,2の順
puts languages[1]

“`

###each文
“`ruby
languages = [“日本語”, “英語”, “スペイン語”]
languages.each do |language| #インデックスをそれぞれlanguageとする
puts “#{language}を話せます” #回答はインデックスの数だけ
                 #この中の変数はこの中でしか使えないので注意
end #忘れないように

“`
###ハッシュ
“`ruby
exam = {“subject”=>”Math”,”score”=>80 } #複数の値をまとめて管理する。{}を使う。
puts exam[“subject”] #exa

元記事を表示

[HowTo]ActiveStorage/アバター画像を登録&表示

先日、Active Storageを使用してアバター登録機能を実装しましたので、備忘録として以下に手順などをまとめておきます!
皆様の開発に少しでも役立てていただければ幸いです。

#Active Storageとは
Active Storageとは、Rails 5.2以降に追加された機能で、ファイルのアップロードを可能にします。
似たような機能でCarrierWaveというものもございますが、こちらは過去に記事にしていたので、
今回はActive Storageを使用することにしました。
https://qiita.com/Tatsu88/items/66374abda7245a006ea0

#Active Storageの特徴
ActiveStorageはactive_storage_attachmentsとactive_storage_blobsの2つのテーブルを作成します。
アップロードした情報はこれらのテーブルに格納され、モデルと関連づける必要があります。

#完成イメージ
今回はマイページのアバター実装を目指します。
まず、アバター情報がないときは以下のイメージとなります

元記事を表示

インクリメンタルサーチで追加済みユーザーが検索されないようにする

## 目的
チャットアプリのグループメンバー追加ページを以下の仕様で作成する。
– インクリメンタルサーチでメンバー検索をして登録リストに表示
– 登録リストに表示されたメンバーを登録ボタンで追加リストに登録
– 登録されたメンバーは登録リストに表示されない

## 問題点
登録されたメンバーが登録リストに表示されてしまう。

## 考え方
検索されたメンバーのIDが追加リストに登録されたメンバーのIDと重複しない場合のみ表示させれば良い。

## コード
“`javascript:before.js
users.forEach(function (user) {
if (user.id) {
addUser(user);
}
})
“`
“`javascript:after.js
users.forEach(function (user) {
let idNum = document.getElementById(user.id);
if (user.id && !idNum) {
addUser(user);
}
})
“`

元記事を表示

Railsで、どちらか一方のカラムを入力必須(二者択一)にするバリデーション

## はじめに
Ruby on Rails で どちらか一方のカラムを入力必須にするバリデーションについて書きます。

具体的な例をあげると、ユーザーモデルの`email`と`phone`、どちらか片方だけに必ず値が入るようにバリデーションします。

## 要件に合わなかったバリデーション
ググって下記のようなバリデーションを見つけましたが、両方入力した場合にバリデーションを通ってしまうので、要件には合いません。

“`ruby:app/models/user.rb
class User < ApplicationRecord # phoneが空ならば、emailを必須にする validates :email, presence: true, unless: :phone? # emailが空ならば、phoneを必須にする validates :phone, presence: true, unless: :email? end ``` ```ruby User.create!(name: "たなか", email: "test@example.com", pho

元記事を表示

EC2サーバで生成した公開キーはどこからどこまでなのか

>cat ~/.ssh/id_rsa.pub

コマンドで作った公開キーは、どこからどこまでなのか?

###結論

ssh-rsa AAA…
から始まって、

…== ec2-user@ip-000-00-00-000
までが

公開キーです

GitHub で SSH keyを登録するときの参考になればと。

元記事を表示

ウェブサービスの主な機能について

# 主な機能一覧

###ユーザー管理
1.ユーザー登録機能
2.ログイン機能
3.ログアウト
4.プロフィール登録
5.プロフィール編集
6.退会
7.パスワード変更
8.パスワードリマインダー
9.管理者ユーザー登録

###コンテンツ管理

10.コンテンツ登録
11.コンテンツ編集
12.コンテンツ削除
13.コンテンツ一覧表示
14.コンテンツ詳細表示
15.コンテンツ検索
16.お気に入り登録
17.決済

基本的には上記の機能を実装し、そこに追加で機能を付け足していくことでほとんどのウェブサービスを作ることが可能になる。

元記事を表示

初めてのbootstrap導入(rails)

## はじめに
bootstrapを導入する時に手間取ってしまったので、初めてbootstrapを触ってみる人でもわかりやすく、導入手順を一からおさらいします:baby_tone1:超初級編です:baby_tone1:

## ① Gemfileの末尾にbootstrapを追加

“`ruby:Gemfile
gem ‘bootstrap’
“`
**この時、compass-railsというgemが追加されてあるとエラーを吐いてしまうので、なくて問題ないようなら削除します。**
## ② gemの更新

“`ruby:command
$ bundle install
“`

## ③ application.cssにbootstrapを導入
app>assets>stylesheet>application.css

“`ruby:application.css
@import “bootstrap”;
“`
application.cssをapplication.scssに名前変更

## ④ application.jsにもbootstrapを適

元記事を表示

スクリプト言語 KINX/ライブラリ(File/Directory)

# ライブラリ(File/Directory)

## はじめに

「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」でお届けしているスクリプト言語 Kinx。[前回](https://qiita.com/Kray-G/items/4c6011279d0bd3036da8)の記事で **プレビュー・リリースしたぜ** と勇み足ぎみに突っ走ったが、マニュアルが整っていないので、やはりなかなか使いづらいに違いない。現時点で参考になるのは以下しかないし、英語なので。

* [Quick Reference Guide](https://github.com/Kray-G/kinx/blob/master/doc/QuickReference.md)
* [Kinx Specification](https://github.com/Kray-G/kinx/blob/master/doc/spec/README.md)
* [初回紹介記事](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76) からの各

元記事を表示

RailsのformにAjaxを実装する前提

RailsにjQueryを使ったAjaxを適用するために色々調べました。
個人的な備忘録として残します。

#configを設定

“` config/application.rb
require File.expand_path(‘../boot’, __FILE__)

module SampleApp
class Application < Rails::Application config.action_view.embed_authenticity_token_in_remote_forms = true # 追加 end end ``` #コントローラーの変更 ``` class HogesController < ApplicationController def hoge respond_to do |format| format.html redirect_to hoge_path format.js # ※下 end end end ``` ※ renderで指定しなければ`ア

元記事を表示

Ruby on Rails チュートリアル学習記録 第6章

第4、5章については特に書く内容がなかったため学習記録は付けませんでした
# 6.1
特になし
# 6.2
特になし
# 6.3
`heroku run rails db:migrate`を`bash: heroku: command not found`というエラーメッセージ。
[3章](https://qiita.com/okbiz07/items/7cb45e325ae4afd0c549)の時と同じ方法で解決
`nvm install node`
`npm install -g heroku-cli`
を実行後、あらためて`heroku run rails db:migrate`を実行
# 6.4
特になし

元記事を表示

Rubyの例外処理まとめ

## そもそも例外とは?

プログラム実行中に発生したエラーの意。
例外処理を記述しないと、例外発生時点でプログラムが停止してしまい、それ以降に記述してあるコードが読み込まれない。
Rubyで例外を補足するためには`rescue`メソッドを用いる。

## 例外の種類

[Ruby公式リファレンス](http://doc.okkez.net/2.1.0/view/library/_builtin)を参照。

## begin~rescueメソッド

例)「1/0」の箇所で、整数は0では割れないため、「**ZeroDivisionError**」という例外が発生。

“`ruby
begin
1/0
rescue => e
puts e
end

#=> divided by 0
“`

eには例外オブジェクト(ZeroDivisionErrorなど)が代入されるので、それら例外オブジェクトに実装されている基本的なメソッドを使用することができる。
– class : 例外の種類
– message : 例外のメッセージ
– backtrace : 例外発生の位置情報

元記事を表示

【Rails/Ruby】クラスメソッドとインスタンスメソッドの使い分け

「クラスメソッドとインスタンスメソッドの使い分けについて教えてください」
って前に聞かれてちょっと困ったことを思い出したのでまとめてみました~???

※クラス・インスタンスの概念の説明やクラスメソッド・インスタンスメソッドの詳しい説明は端折ってます~!

## クラスメソッド

・クラスに対して使う
 例:newメソッド/など

“`ruby
# インスタンスの生成
Animals.new
“`
・DBからデータを取得したり保存するときに使う
 例:allメソッド/findメソッド/createメソッドなど

“`ruby
# 引数に一致するデータをDBから取得する
User.find(1)
“`

・外部ファイルやサイトからデータを取得する(データを取得し、インスタンスを作成する)ときに使う
 例:スクレイピングなど

・全体で扱うべき情報を扱うときに使う
 例:投稿の総数など

## インスタンスメソッド

・生成した個々のインスタンス(投稿1つ1つ、ユーザー1人1人など)に対して使う
 例:update/destroy/eachなど

“`ruby
# userにイン

元記事を表示

Hashの先頭からn個をとりだす

データを抽出してchartkickに渡すHashに対し、先頭n件を抽出したかった。
helperに以下のメソッドを作成。

“`ruby
def chart_limit(hash, limit=5)
# Hash[*hash.to_a.shift(limit).flatten!]
# コメントを受けて以下に変更。
hash.take(limit).to_h
end
“`

“`ruby:利用例
hash = {“男性40代”=>13, “女性40代”=>6, “女性30代”=>5, “男性60代”=>4, “男性30代”=>4}
p chart_limit(hash, 3)
#=> {“男性40代”=>13, “女性40代”=>6, “女性30代”=>5}
“`
ruby 2.6.5で確認済み。

### 参考
– [Ruby \- Ruby Hashの先頭n個を別のHashとして抽出する|teratail](https://teratail.com/questions/59631)
– [Hash\.\[\] \(Ruby 2\.7\.0 リファレンスマニュアル\

元記事を表示

SQLインジェクションを回避して、SQL内のカラムを動的に変える

##概要
①飲食店クラスがあって、ランチの時間帯とディナーの時間帯を絞り込むメソッドがある
②内部的には、引数に始まりの時間と終わりの時間を受け取って、その条件に合うレコードを取得する
③両者はロジックがほぼ一緒で、違うのはwhere句内のカラムだけ
④同じロジックは書きたくないので、なるべく共通化させたい!

“`ruby
# 飲食店クラス
class Restaurant < ApplicationRecord # 飲食店のランチの時間を絞り込むメソッド scope :where_by_between_lunch_time, lambda { |start_date, end_date| if start_date.present? && end_date.present? where('lunch_time BETWEEN ? AND ?', start_date, end_date) elsif start_date.present? where('lunch_time >= :date’, date: start_date)

元記事を表示

OTHERカテゴリの最新記事