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

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

RubyとPythonとmap

一方の言語でのイメージが邪魔して、もう一方の言語での書き方が思い出せない時がたまにあるんです。

“`python:Python
map(lambda n: str(n).rjust(3,”0″), [1,2,3])
>> [“001”, “002”, “003”]
“`

“`ruby:Ruby
[1,2,3].map{|n| n.to_s.rjust(3,”0″)}
>> [“001”, “002”, “003”]
“`

元記事を表示

eager_load/preload/includes/joinsの違いメモ

# 動機
日頃Goしか書いてないGopherがRails書いたときにつまったActiveRecord、特にjoins周りの挙動が直感的によくわからなかったので実際にデータ用意して調べてみた
(メソッドの具体的な説明は他にたくさん記事があるのでそちらを参照してください。)

# 実行環境
[Rails公式Docのサンプルブログアプリ](
https://railsguides.jp/getting_started.html#%E3%83%96%E3%83%AD%E3%82%B0%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%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
の `article.rb` と `comment.rb` のモデルを使用。
今回は、それぞれ約25万行を用意した。

“`article.rb
class Article < ApplicationRecord has_many :comments, dependent:

元記事を表示

Herokuでデプロイした際にApplication error(エラーコードH10 (App crashed))が出た時の対処法

#環境

Ruby 2.6.3
Rails 5.2.3

# 現象

Railsアプリケーションを作成後、Herokuへデプロイした際に以下画像のエラーが発生。
その際の対処法を備忘録として残しておきます。

![https___qiita-image-store.s3.amazonaws.com_0_110452_526e9c21-ec79-5305-c7e5-b536f689a3c4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512331/7d3b5b37-7478-fa14-0d3d-6cf01949dbfd.jpeg)

# 【対処方法】エラーの原因を把握する

以下コードで状況を把握します。

“`
$ heroku logs –tail
“`

エラーコードが確認できました。

“`
2019-11-26T05:06:44.357974+00:00 heroku[router]: at=error code=H10 desc=”App crashed” method=GE

元記事を表示

RubyとAWS LambdaでサクッとSlackへポストしてみる

とりあえずAWS Lambdaを動かしてみたかった。
試しなのでブラウザ上で完結するようにしたが、割と時間がかかった。

## 関数の作成
(AWSアカウントを作成してAWSコンソールにサインインするところまでは省略)

サービス一覧から「Lambda」 → 「関数」 → 「関数の作成」を選択。

関数の作成画面では「一から作成」を選択。関数名は任意。
ランタイムはRuby2.5 (2019/11/26現在) を選択。
ロールはデフォルトのまま。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182050/418a2e9a-29b2-ce14-e7f6-c8b2bf83cf1f.png)

「関数を作成」ボタンを選択すれば関数が作成され、編集画面へ遷移する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182050/e5274217-09f7-45e8-1f10-c5d48e9d6

元記事を表示

kaminariのlast_page?の動作に気をつけて!

## 主旨と結論

連番で管理するのではなく、「前へ」「次へ」ボタンを設置しての運用です。
**記事のポイントは、データが入っていない状態でページネーション機能を使う際に気をつけること**
**常に何らかのデータが存在する場合は気にする必要はありません。**

下記を実現したい場合に参考になります。

– 最初のページは「前へ」ボタンを消す
– 最後のページは「次へ」ボタンを消す
– 最初で最後のページは両方とも消す**←ここで次へ問題が発生します。**

なので

当初問題のlast_page?の条件分岐は、

“`erb
<% unless pagenates.last_page? %>
libvipsを使ってRails6でActiveStorageする【Windows,Ubuntu環境】

#この記事でつくるもの
RailsのActiveStorageを使って簡単なサムネイル表示するCRUDを作成します。
![tmp.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530426/ff266c39-8d57-2504-9fdf-66e42b8daf3c.gif)

#手順
– Ubuntuにlibvipsの最新ソースを持ってきて、ビルドとインストール
– UbuntuからWindow環境をマウントしてrails new
– ActiveSrorageに必要なRailsコマンドと設定
– 必要なgemのインストール
– Ubuntuからrails s

#Ubuntuにlibvipsの最新ソースを持ってきて、ビルドとインストール
RailsのActiveStorageはlibvipsまたはImageMagickが必要です。
この記事では実行速度の速いlibvipsを使用します。

まずは必要なパッケージをインストールします。

“`Ubuntu:Ubuntu
$ sudo apt-get

元記事を表示

※Ruby記事まとめ

#はじめに
記事数が多くなってきたので、ジャンル別に記事のリンクをまとめます。
本記事は***Ruby***です。
#リンク

[Rubyの基本箇所についての復習①(puts)](https://qiita.com/Moon1126Snow/items/972e9b16822453384d4e)
[Rubyの基本箇所についての復習②(#{ })](https://qiita.com/Moon1126Snow/items/d2c0896ea076587eccc0)
[Rubyの基本箇所についての復習③(gets.chomp)](https://qiita.com/Moon1126Snow/items/33066b3c09a873690c85)
[Rubyの基本箇所についての復習④(ハッシュオブジェクト)](https://qiita.com/Moon1126Snow/items/d88f1021bc3c6c75a194)
[Rubyの基本箇所についての復習⑤(配列)](https://qiita.com/Moon1126Snow/items/1a1d7f185863772fce6d)

元記事を表示

RSpecのlet(let!)とは

### letとは

– RSpecのメソッドのひとつ
– letは呼ばれた時に初めてデータを読み込むという遅延読み込みをするメソッド。letはboforeブロックの外部で呼ばれるため、セットアップのコードを減らすことが可能。
– before ブロックの場合では各dscribeやcontextの前に毎回呼び出される。これはテストに予期しない影響を及ぼす恐れがある。また、不要なデータ作成をしてテスト実行を遅くする原因になることもある。

### beforeブロックとの違い

– letは遅延読み込み
– letはインスタンス変数に格納しない

### let!

– let!は遅延読み込みされないlet
– すべてのテストが余分なデータを持つ可能性がある

### letとlet!,beforeブロックの使い分け

– 決まった定義はないがテストはDRYを意識するあまり読みにくくなってしまったら本末転倒。
– よって、読みやすいと思った方を使用していく。

元記事を表示

APIキー・環境変数を設定したのにうまく反映されない時には…..

##概要
メルカリのクローンサイトを作成する際にインフラ、デプロイ関係の担当をした者が沼にハマった部分を共有し、同じような状態から抜け出すための一助になればと思ったことが投稿するきっかけになります。
今回は、API関連のキーや環境変数を設定したのに本番環境では上手く挙動しない際に対処した方法をいくつか紹介します!
基本的なことから盲点な部分まで、同じような状況で困っている方の一助に少しでもなれたら幸いです。

##環境
– Rails v5.2.3
– Ruby v2.5.1
– Unicorn
– capistrano
– nginx
– mysql
– AWS, EC2(本番環境)

## ①まずはスペルミス、スペース(空白)の確認
最初から言われなくても分かるよっていう内容ですいません。
しかし、スペルミスは皆さん気をつけていることだとは思いますが、意外と足を引っ張るのは**スペース(空白)**の確認です。

“`
(例)
AWS_SECRET_ACCESS_KEY = ‘************************’
=> スペースあり
AWS_SECRET_ACCE

元記事を表示

rails 自動更新

ajaxを用いて自動更新機能を実装する。
今回は前回、作成した非同期通信のコードに書き加える形で自動更新を実装する。

##完成品
[![Image from Gyazo](https://i.gyazo.com/d17dca8307934107c0cc619a77719f54.gif)](https://gyazo.com/d17dca8307934107c0cc619a77719f54)

##環境
ruby:2.5.1
rails:2.5.3
DB:mysql(Sequel Pro)
ブラウザ:Google
OS:Mac(10.14.6)

##Github
https://github.com/tana1818/auto_update

##作成する前に
####なぜ必要か
日々使ってるLINEを考えてみましょう。
LINEのように、相手側が入力すると自分側が、LINEを開いたままでも、
リアルタイムで更新されます。あれも自動更新機能が実装されています。
自動更新がないままLINEのチャット機能を使用するとなると
表示されている画面をいちいちリロードしないと画面が更新されませ

元記事を表示

rails 非同期通信

今回はシンプルな投稿機能をrailsでjbuilderを使用して非同期通信を実装する

自分はjbuilderを使用した実装方法しかわからない、、

コードも綺麗とは言えませんが、自分が遭遇したエラーも何個か書いていこうと思うので

誰かの助けになればと思います

いずれjbuilderを使わないパターンやjs.erbを使ったパターンとの比較をしていきたい

##完成品
[![Image from Gyazo](https://i.gyazo.com/18041ab0e4dfa7ee277c4746c6c7db42.gif)](https://gyazo.com/18041ab0e4dfa7ee277c4746c6c7db42)

##環境
ruby:2.5.1
rails:2.5.3
DB:mysql(Sequel Pro)
ブラウザ:Google
OS:Mac(10.14.6)

##Github
https://github.com/tana1818/ajax

##作成手順

####開発ファイルの作成
“`ruby:ターミナルで置きたいディレクトリに移動してから

元記事を表示

RailsでAPIを作ってJson形式のレスポンスを返すまで

# はじめに
まとめておくと後で楽だよねってことで

# 環境
Ruby 2.6.5p114
Rails 6.0.1

環境自体はDockerコンテナに押し込めているので、まずはDockerの設定周りからやっていきます。

# Docker関連

## docker-compose.yml
[こちら](https://qiita.com/me-654393/items/ac6f61f3eee66380ecd7)の記事を参考にしつつ作成しています。
ENTRYPOINTは自分が理解しきれてないので指定していません。
なくても動きます。

後、重要なのはmysqlのvolumesとして`/etc/mysql/conf.d`がいったん必須です。
mysql8からデフォルトの認証方式がパスワードになっていないので、それをパスワードにするために永続化して設定ファイルを入れてあげないと困ります。
認証方式変わったということは、それをデフォルトとして他を変えるのが本筋ですが、公開するサービスではないので、いったんパスワードにしています。

“` yaml
version: ‘3’
service

元記事を表示

Ruby学習ログ:その1【do…end = {…} , etc.】

Rubyを学び始めて2ヶ月ほどの初学者です。
アウトプットも兼ねて学習したことを投稿していこうと思います。
早速いきましょう。

#「do…end」は、「{…}」に書き換えられる

“`ruby
hoge = [1, 2, 3]
hoge.each do |hogey|
puts “オラは#{hogey}歳だ!”
end
puts “========================================”
hoge = [1, 2, 3]
hoge.each {|hogey|puts “オラは#{hogey}歳だ!”}
“`
“`:実行結果
オラは1歳だ!
オラは2歳だ!
オラは3歳だ!
========================================
オラは1歳だ!
オラは2歳だ!
オラは3歳だ!
“`
同じ結果になりました
##いつでも使えるか?
ところでデメリットはないのか?と思って調べてみたらどうやらあるっぽい
→[ブロックをdo…endで書くか{…}で書くかにより挙動が変わる例]
(https://qiita.com/rioca

元記事を表示

ABC083B – Some Sums

# 問題
https://atcoder.jp/contests/abs/tasks/abc083_b
スクリーンショット 2019-11-26 14.48.59.png

#1回目
##回答
“`ruby
N,A,B = gets.chomp.split(” “).map(&:to_i)

res = 0
for num in 1..N do
numList = num.to_s.chars.map(&:to_i)
sum = 0
for n in numList do
sum += n
end
if sum >= A && sum <= B res += num end end puts res ``` ##結果 スク</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>AtCoder</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/snaruse0608/items/fd5dd189b853e737d54f'>元記事を表示</a></div>
<h3 id=Windowsにてp “日本語”で”日本語”を表示させる方法

# Ruby on WindowsのFAQシリーズ
初学者からよく聞く

“`ruby:nihongo.rb
p “日本語”
p [“日本語”]
p “日本語”: :”日本語”
“`

“`
“\u65E5\u672C\u8A9E”
[“\u65E5\u672C\u8A9E”]
{:”\u65E5\u672C\u8A9E”=>:”\u65E5\u672C\u8A9E”}
“`

となる問題です。

## ちなみに脳筋回答
コンソールに日本語表示させる必要なんて無いんじゃない?
(割と真面目に、Rubyの`p`による日本語表示をwindowsでやる必要は無いと思ってます)

## 真面目回答
出力が**真の意味で文字化けする危険性がある**が
スクリプトの頭に

“`rb
Encoding.default_internal = __ENCODING__
“`

付けとけ

## p “日本語”とは?

[Kernel.#p](https://docs.ruby-lang.org/ja/latest/method/Kernel/m/p.html)
> 引数を人間に読みやす

元記事を表示

Railsを使ってチャットアプリを作る

#はじめに
Railsを使って簡単なチャットアプリを作ったので、そのときの手順をまとめました。

![chat-app.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/c0946340-a331-a933-80d5-9740a67605d1.gif)

#環境
“`:
$ ruby -v
ruby 2.5.1p57 (2018-03-29 version 63029) [x86_64-darwin19]

$ bin/rails -v
Rails 5.2.3
“`

#参考
チャットアプリを作る際、以下を参考にさせて頂きました。
この記事で掲載しているソースコードの大半は下記の2つのページの内容が基になっています。

[Action Cableでリアルタイムチャットアプリの作成方法 (Rails 5.1.4にて)(その1) herokuで動かす!](https://qiita.com/Hijiri-K/items/c3774c72a2cb68e1a720)
[Rails 5 + Acti

元記事を表示

【Rails】flashの使い方

flashを利用して、アクション実行後に簡単なメッセージを表示させることができます。
ログイン周りの処理において特に重宝されます。
(Sessionはモデルを持たない→ActiveRecordがエラーメッセージを吐かないから)

##使い方
`flash[:<キー>] = <メッセージ>`で登録し、`flash.each do |message_type, message|…`で出力します。

##`flash`と`flash.now`
flashの仲間に`flash.now`があり、
`flash`→次のアクションまでデータを保持する→`redirect_to`と一緒に使う
`flash.now`→次のアクションに移行した時点でデータが消える→`render`と一緒に使う
という使い分けが必要です。

##TODOアプリにflashを実装する
簡単なTODOアプリにflashを実装していきます。
・[Ruby on Railsで簡単なアプリを作成](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)
・[RailsアプリをHe

元記事を表示

Rails/アンチパターン: 一見すると存在しないアクション

何の変哲も無い(?)コントローラー。これはエクスポート処理関連の各種コントローラーの親クラス

“`ruby:controllers/export_controller.rb

class ExportController < ApplicationController def some_method やりたい処理 end end ``` そして、何もないHogeController。よく見るとExportControllerを継承している。これを見落とすとやばい ```ruby:controllers/hoge_controller.rb class HogeController < ExportController end ``` 最後にrouting。HogeControllerのsome_methodアクションにroutingしている ```ruby:routes.rb get '/hoge', to: 'hoge#some_method' ``` # 何が問題か * アクション=そのcontrollerに定義するという設計スタイルの

元記事を表示

何も分からないのに始めた。

はじめまして、ほやっとです。
何も分からないのにプログラミングの勉強をはじめました。

印刷物やWEBの仕事をしていました。
プログラミングってもっと遠いところにあると思ってたんです。

ぼんやり、
あんなシステムを作るのってどうやるんだろ~~??って思ってたけど、
WEBに最後繋がるんだ!というのに純粋に驚いた。

そりゃそうか・・・;笑

そう思ったら急に身近に感じてきた。

そしていつかスキルとして身につけたいと思って
何だか分からないけど、やってみよう精神で始めました。

Qiitaもなんだかよくわかってません!ごめんね!

元記事を表示

[Ruby] 継承可能なクラス属性を定義する

# やりたいこと

継承可能なクラス属性を定義したい。

“`rb
class A
self.x = :hoge
end

class B < A end class C < B self.x = :fuga end A.x #=> :hoge
B.x #=> :hoge (親の x を継承する。)
C.x #=> :fuga (再定義した場合はその値を使う。)
“`

# たったひとつの冴えたやり方

Active Support コア拡張の [Class#class_attribute](https://api.rubyonrails.org/classes/Class.html#method-i-class_attribute) を使う。

“`rb
require ‘active_support/core_ext/class/attribute’

class A
class_attribute 😡

self.x = :hoge
end

class B < A end class C < B self.x = :fuga end A.x

元記事を表示

OTHERカテゴリの最新記事