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

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

[未経験エンジニア]のオリジナルアプリ制作の反省6. ランキング機能の実装(簡単)

# 今回書くこと
ランキング機能の実装の超簡単なやり方

## 環境
Ruby 2.6.5
Ruby on Rails 6.0.4.3

## 結論
[こちらの記事](https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4)を参考にデータの取得方法を工夫することで、結構簡単に実装できる。

##前提
記事にお気に入り機能を実装し、そのお気に入り数を参考してランキング機能を実装します。

テーブルとアソシエーションはこの通りです。

– **favoritesテーブル(誰かどの記事にお気に入りしたかを管理=中間テーブル)**
– **usersテーブル(ユーザーの情報を管理)**
– **articlesテーブル(記事の情報を管理)**

![the_brewers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948673/2fe78107-d13c-fc66-56f3-b6cc7224a3a4.png)

※(reviewsテーブルは今

元記事を表示

レスポンシブwebデザイン実装方法

#導入
レスポンシブデザインをポートフォリで導入したい方向けに記事を作りました。

#目標
 レスポンシブデザインを実装する

#viewportを設定する
“`views/layouts/application.html.erb

APPNAME
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
  #下記の一文を追加

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'

元記事を表示

【Rails 部分テンプレート(小学生でも分かる解説)】

#部分テンプレートとは#
「部分テンプレート」っていうのは、
`同じところをまとめておいて、それを使い回すやつ。`

例えば、
AくんとBくんとCくんがいる。
3人ともみんな、9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。

(「@」は、いったん気にしないで)

この時に、
「Aくんは9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。
Bくんは9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。
Cくんは9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。」

これは、、長いしだるいしめんどいし、字で書くのも大変。

そこで、「9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。」っていうところを「**こんな人**」と言い換える。

「こんな人」=「9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。」

すると、
「Aくんは**こんな人**」
「Bくんは**こんな人**」
「Cくんは**こんな人**」

こんな短くできる。

#部分テンプレートの使い方#

Railsでの使い方は以下の感じ。

##①

元記事を表示

[Ruby on Rails] マイグレーションファイルをUpのまま消去してしまった時の対処法

***これはホントにあった怖い話です。**
マイグレーションファイルを間違って**Upのまま削除**した男がいました。
その男は怖くなってしまい、また新しくrails g modelコマンドで、
モデルとマイグレーションファイルを生成してしまいました。

そして男は無限に**エラー地獄**を彷徨うこととなったのでした。

 
**そんな男(自身)の失敗から学んだ事を書いていきます。**

結論から言うと、
マイグレーションファイルを**修正**したり、**削除**する際は、
必ず

rails db:rollback

で、**down**の状態でマイグレーションファイルを操作するようにしましょう。
まず、削除してしまったものはしょうがないです。

## 解決方法

**rails db:migrate:status**でステータスの確認をします。

**NO FILE**となっている**マイグレーションID**の番号をコピペして
手動で仮のマイグレーションファイルを作成します。
  

(例)
2343687287282_sample と作成します。

作ら

元記事を表示

Math.sqrtとInteger.sqrtの使い分けについて

# 経緯
競技プログラミングでMath.sqrtだと精度が足りず不正解になるが、Integer.sqrtだと正解になる設問がありました。なのでこの2つをどう使い分けるべきか考えてみました。
※ ちなみに対象の設問はAtCoder Beginner Contest 191の「[D – Circle Lattice Points](https://atcoder.jp/contests/abc191/tasks/abc191_d)」

# 結論
実行環境によるが、小数点以下15桁より小さい部分まで精度が必要な場合はInteger.sqrtのほうが良い。なお、Integer.sqrtは整数型を返すので、例えば2の平方根を求める場合は以下のように下駄を履かせる必要がある。

“` Ruby
U = 10 ** 20
“%.20f” % Integer.sqrt(2 * (U ** 2)).quo(U)
=> “1.41421356237309504880”
# Wikipediaで調べた2の平方根と同じ値

“%.20f” % Math.sqrt(2)
=> “1.4142135623730

元記事を表示

Railsで週間いいねランキングを作る!

未経験からエンジニアへの転職を目指しています。
初投稿ですのでわかりにくい箇所があるかもしれませんがご容赦ください。

本題です。  
Railsでいいねのランキング機能を実装中に、週間いいねランキングも作りたいと思い実装しました。
※いいねランキングの実装は以下の記事を参考にしました
https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4

今回は週間いいねランキング(前週の月曜〜前週の日曜)を表示する方法を書いていきます。
モデル名等は適宜ご自身のものに置き換えてください。

# 前提
– 料理(cooks):いいね(likes)=1:N
– いいね機能の実装は完了している

# モデルにメソッドを定義

“`ruby:cook.rb
def self.last_week # メソッド名は何でも良いです
Cook.joins(:likes).where(likes: { created_at: 0.days.ago.prev_week..0.days.ago.prev_week(:sunday)}).group(

元記事を表示

Ruby on Railsの原則を具体例を用いて解説

# CoC ~Convention Over Configuration~

>今回も以前紹介した[Ruby on Railsの原則](https://qiita.com/iamu_TECH_CAMP/items/0d0c9686a651b009f7a1#ruby-on-rails%E3%81%AE%E5%8E%9F%E5%89%87)に関する内容を深ぼっていきます。

**CoC**とは実際にどの様な場面で用いられているのか…

>[Convention Over Configurationの略]
「設定よりも規約を優先する」

ここでいう`規約`とは、
`Railsがあらかじめ決めているルール`のことを指します。
ゼロから`自身で設定するのではなく`「設定よりも規約を優先」して作業するという捉え方で問題ないようだ。

## 具体例

Ruby on Railsを使って開発を進めてきて

>「コマンドだけで`Railsが自動で`ファイルなどを生成してくれた」
「`Railsが勝手に`処理を用意してくれていた」

なんていう経験をしてきたと思います。
まさにソレが`「設定よりも規

元記事を表示

【Rails】画像プレビュー機能実装【初心者向け】

#目標
下記デモのような、画像プレビュー機能を実装する
![a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771476/3e37317c-8d84-1c22-cd1b-051be9825c19.gif)

#前提
* 既に画像を表示、登録できる状態であること
私は、`gemのrefile`を使用して実装しています。

#実装
ソースコードは下記の通りです。
解説は、丁寧にやっていきます!

“`ruby:new.html.erb
…..

<%= f.label :"スタジオ写真" %>
<%= f.attachment_field :studio_image, id: "image" %>
<%= attachment_image_tag @studio, :stu

元記事を表示

Tips: RougeにDiffシンタックスとと各言語のシンタックスを一緒にかけるLexerを追加する

コードのシンタックスハイライトを行うgemとして、[Rouge](https://github.com/rouge-ruby/rouge)が有名だと思います。
RougeにはDiffのシンタックスはありますが、Diffと各言語のシンタックスを同時に適用することができないので、それを実現するためのTipsを紹介します。

実は実現する方法は[Rouge内のIssue](https://github.com/rouge-ruby/rouge/issues/642)で議論されていました。これを使って作ってみます。

まずは1つのLexerに対してDiffの指定も行えるようにしてみます。

“`ruby:rubyの場合(Rouge::Lexers::Rubyはロードしている前提)
module Rouge
module Lexers
class DiffRuby < Ruby prepend :root do rule(/^\+.*$\n?/, Generic::Inserted) rule(/^-+.*$\n?/, Generic::

元記事を表示

カテゴリー別、最大いいね数の投稿を別途表示

#概要
投稿別に、いいね数が最大値の回答を別途表示できる方法について述べている。

#バージョン
rubyのバージョン ruby-2.6.5
Railsのバージョン Rails:6.0.0

#前提
・いいね機能を実装済み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1052793/8d465574-4aba-4926-bad6-d209aca5d3ca.png)

#できること
いいね数、最大の投稿を別途表示できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1052793/28b61d61-1699-5bef-2a9b-6bc89675ca4d.png)

#今回の例(テーブルについて)
投稿・・・definition
回答・・・answer
いいね・・like

#実装の全体像
①コントローラーにインスタンス変数を定義

②viewに、表示のためeachメソッドを用い

元記事を表示

【Rails】Rspecで、deviseのsingn_inを使ってログイン処理を書く

#目標
requestテストで、deviseのヘルパーを使ってログイン処理を書けるようにする

#前提
* 既にRspecでテストを1件以上実行できる
ログイン処理どうすればいいの?が、メインテーマなのでRspec導入部分などは割愛します。

#本題の前に
まず、私はRspecで、model, system, requestの大きく3つに分けてテストを記述しました。その中で、systemテストでのログイン処理をどうしたのかを簡単に書いていきます。

#systemテスト
systemテストでは、機能のテストを記述しました(ボタン押したら期待通りの結果になるかとか)。この時のログイン処理は、ヘルパーメソッドを定義して使いました。
導入方法は下記の記事を参考にしました。
[【Rails】Rspecでマクロを定義して処理を共通化する方法](https://qiita.com/matsubishi5/items/6df9f14e5daa5e0dc1c8)

で、結果が以下の通りです。

“`ruby:spec/support/helper_macros.rb

元記事を表示

変数の種類について

# はじめに
Rubyでミニアプリを作成中に、変数について再度学び直したので、備忘録として付けたいと思います!

# 変数の種類について

## ローカル変数

ローカル変数は、変数が宣言されたメソッド内やブロック内でのみ使用できます。

“`
class Menu
def name(str)
food = str
puts food
end

def show

end
end

“`

## インスタンス変数
インスタンス変数は、@変数名として定義します。
@をつけることにより、同クラスの別のインスタンスメソッド内でも使用することが出来ます。

“`
class Menu
def name(str)
@food = str
puts @food
end

def show
puts @food
end
end
“`

## グローバル変数
グローバル変数は、$変数名として定義します。
$をつけることにより、メソッド外や、クラス外からも使用できます。
しかし、注意が必要となります!
広い範囲で使用できることから、変

元記事を表示

【Railsチュートリアル】第6章 ユーザーのモデルを作成する②

# 【Railsチュートリアル】第6章 ユーザーのモデルを作成する

**本章の目的**:一番重要なステップであるユーザー用のデータモデルの作成と、データを保存する手段の確保について学んでいく。

## 6.2 ユーザーを検証する

**本節の目的**:検証(Validation)を実装する。

**検証(Validation)**とは?
nameを空にしない、emailはメールアドレスのフォーマットに従う、というように何らかの制限を課すことができるActive Recordの機能。

**よく使われるケース**
存在性(presence)、長さ(length)、フォーマット(format)、意性(uniqueness)、確認(confirmation)

### 6.2.1 有効性を検証する

**検証方法**

1. 有効なモデルのオブジェクトを作成
2. その属性のうちの1つを有効でない属性に意図的に変更
3. バリデーションで失敗するかどうかをテスト

“`ruby:test/models/user_test.rb

require ‘test_helper’

class

元記事を表示

パッケージ管理について

#パッケージとは
プログラムや処理をまとめたもの。ライブラリと似てますが、パッケージの中にライブラリをまとめていることもある。

#パッケージ管理とは
パッケージやパッケージが持つライブラリなどの依存関係を考慮してインストールやバージョンアップを行う管理のことで、パッケージ管理ツールというもので管理することができる。(例:Homebrewなど)
ホームディレクトリで以下の記述でインストールできる。

##Homebrew
macOSのパッケージ管理ツール。
macOS上で動作するアプリケーションの多くがHomebrewからインストールできる。

“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`
Homebrewには様々なコマンドが用意されており、主にパッケージのインストールや更新、アンインストールなどを行うことができる。

|コマンド|説明|
|:–:|:–:|
|brew -v|

元記事を表示

Rails6にインストールしたActiveStorageを削除する方法

## はじめに
コンパイルしたときにこのエラーが出た

“`
ModuleNotFoundError: Module not found: Error: Can’t resolve ‘@rails/activestorage’
“`

ActionStorageをアプリ内で使用してないから消そうと思った時のログを書いていきます

## 方法

config/application.rb内にrequireされているものをコメントアウト

“`ruby
require “rails”
require “active_model/railtie”
require “active_job/railtie”
require “active_record/railtie”
# require “active_storage/engine”
require “action_controller/railtie”
require “action_mailer/railtie”
# require “action_mailbox/engine”
# require “action_text/eng

元記事を表示

Rubyで文字列を反転させる(reverseあり・なし)

Rubyで文字列を反転させるプログラムを書きます。

“`reverse.rb
str = “123456789”
reversed_str = “”
str_size = str.length.to_i

while str_size > 0 do
reversed_str << str[str_size - 1] str_size -= 1 end puts str puts reversed_str ``` ```:実行結果 $ruby reverse.rb 123456789 987654321 ``` また、Rubyの組み込みライブラリを使っても出来ます。 String#reverse 文字列を文字単位で左右逆転した文字列を返します。 ``` p "foobar".reverse # => “raboof”
p “”.reverse # => “”
“`

参考:[String#reverse (Ruby 3.0.0 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/method

元記事を表示

[HEROKU] heroku run rails db:migrate できなかったときの対処

git push heroku masterで本番環境にデプロイ後での、データベース作成の際に生じたエラーに関する記事です。

#環境
ruby 2.6.5
rails 6.0.0
db mysql2
Github

#エラーの経緯

本番環境にデプロイ後、heroku run rails db:migrateを行うと

“`terminal
rails aborted!
Mysql2::Error::ConnectionError: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
“`

というエラーが発生。

#手順

結論としては、DATABASE_URLが間違っていました。

以下、解決した手順を記載いたします。

1、ターミナルにて以下を実行
*この時、Created~となればオッケーです

“`terminal
heroku addons:add cleardb
“`

2、次に現在のDATABASE_URLを確認します。
*下記のように表示されるはずです。
CLEAR

元記事を表示

コロナウイルスによってボコボコにされたフィリピン留学業界の未来を考察してみた

今、瀕死状態の留学代理店を存続させるべく、当事者の私が代表し、現状の問題、解決策を考えてみました。

エージェント界隈は横のつながりも広いため、情報を共有しあって共存する方向に向かっています。

非常に苦しい状況が続いておりますが、一緒に乗り越えていきましょう。

フィリピン留学エージェント界隈の現状
2021年2月現在、フィリピンへの渡航が厳しい中、留学することは不可能です。

フィリピン留学を希望する日本人と、フィリピンにある語学学校をマッチングすることで収益を上げていたエージェント会社(代理店)の売り上げは、99%減という結果になりました。

今の留学エージェントの状況を整理すると以下タイプに分かれます。

①固定費を減らし身を潜める
②商材を大きく変える
③独自サービスを作る

①固定費を減らし身を潜める

・留学エージェント一本でやってた会社
・留学エージェント兼、語学学校を運営していた会社

は軒並み、バタバタと倒れていきました。

雇用調整助成金で、社員さんをカバーしている会社も多いですが、社員をリストラせざるを得ない状況です。

特に、高給取りのマネージャー、社

元記事を表示

Rails6でBootstrapとFontAwesomeをwebpack経由で使う

## BootstrapとFontAwesomeのwebpackでの導入方法

Rails6からはwebpackが標準で搭載され、javascriptとstylesheetのファイルの位置も変わっており、意外に苦戦したので記載。

### まずはターミナルからyarnでインストール

“`
$ yarn add bootstrap@4.3.1 jquery popper.js
“`

“`
$ yarn add @fortawesome/fontawesome-free
“`

### 下記のコードを追記

私はjavascriptディレクトリの下にsrcディレクトリを配置しているので注意。

“`scss:app/javascript/src/application.scss
@import “~bootstrap/scss/bootstrap”;
@import “~@fortawesome/fontawesome-free/scss/fontawesome”;
“`

“`js:app/javascript/packs/application.js
import

元記事を表示

数学パズル本で出てきた初見のコードたち

# はじめに

プログラミング学習の一環として数学パズル本を解いています。

もともと数学はどちらかといえば好きなので、解決の方向性や解き方は比較的パッと思いつきます。
紙とペンさえあれば、一応ゴリ押しで解けちゃうこともあります。

が、それをコードに書き起こすとき、
**「この考え方を、どうやってコードに書けばいいの?」**
と陥ることが多々あります。

分からないまま問題の解説を読むと、知らないメソッドや演算子がたくさん出てきます。
完全に勉強不足なので、メモがてら書いていきます。

# 使っている教材

[もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問](https://books.rakuten.co.jp/rb/15291996/)

面白そうだったので購入。
全ての問題にRubyとJavaScript両方の解答コードが載っているので、自分向きでした。

ネットの評判通り、命名はあまり良くない書き方をしているのかも。(`N=oo`がよく出てきます)
まぁ恐らく自分みたいな初心者に分かりやすく書いている結果だとは思います。

# upto

“`rub

元記事を表示

OTHERカテゴリの最新記事