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

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

センパイ!テストのメリットってなぁに?

## とある勉強会にて
勉強会で最近気になっていることがあれば教えてください。という優しいお声をいただき「テストコードを書くのって何がメリットですか?」と質問した時のことを書いていきたいと思います。

## テストを書くメリット

仕様書的な役割
どういう挙動を期待しているのかテストに書いておくことで、新しくプロジェクトに参加した人も理解しやすい

自分を守るため
他者に対して、このプログラムはこのようなテストが通ったという証拠を残せる

複雑な計算
テストコードを書いておけば、複雑な計算を検証の度に行う必要がない

自動化、効率化
コードにすることで、自動的にテストをしてくれるので効率的

変更に対応しやすい
税率変更など、変化があった時にテストを書いていると対応後の検証がしやすい

段階を踏んだ機能
例えば3段階あるプログラムで1段

元記事を表示

【Ruby on Rails】simple_formatの和訳

単純なフォーマットルールを使用してHTMLに変換されたテキストを返します。
2つ以上の連続する改行(\n\nまたは\r\n\r\n)は段落と見なされ、`

`タグでラップされます。
1つの改行(\nまたは\r\n)は改行と見なされ、
タグが追加されます。
このメソッドは、テキストから改行を削除しません。

任意のHTML属性をhtml_optionsに渡すことができます。 これらは作成されたすべての段落に追加されます。

“`html
my_text = “Here is some basic text…\n…with a line break.”
“`

“`html
simple_format(my_text)
# => “

Here is some basic text…\n
…with a line break.


“`

“`html
simple_format(my_text, {}, wrapper_tag: “div”)
# => “

Here is some basic text…\n

元記事を表示

FullCalendar イベントを重複させない方法

# はじめに
カレンダー内の赤枠に囲まれたイベントを下のイベントに重ねようとしたときに、禁止マークが出て重ねる事ができないような設定方法についてまとめました。

使用例としては、予約管理システムで時間の重複が許されないようなケースがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/5e5d6d57-76d1-6a2e-3afb-2e0ee79acafb.png)

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

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

# 前提条件

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

今回はRailsアプリケーションで実装しています。上記の記事を参考にしてみてください。
Railsを使ったことがない人でも簡単に実装することがで

元記事を表示

[Rails6.0]rails db:migrateをする際に発生したDirectly inheriting from ActiveRecord::Migration is not supported.の解決法

gemのpaperclipを使うため“`rails g paperclip post image “`を実行してマイグレーションファイルを生成。

その後“`rails db:migrate “`したら

“`
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

“`
というエラーが発生。

以下のサイトを参考にしたところ、

[【rails5.2.0】rails db:migrateをする際に発生したDirectly inheriting from ActiveRecord::Migration is not supported.の対処法について](https://www.f

元記事を表示

redirect_toとrenderの違い

初投稿です!
説明が足らないと思いますが、見てください!

#**redirect_toとrenderの違い**

![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538880/dc65bc70-3f55-4381-d01b-c58c62cc9fb2.jpeg)

redirect_toはroutingとcontrollerを通ってviewを表示していますが、renderはいきなりviewを表示させています。
redirect_toでは新たなリクエストがされたのと同じ動きになりますので、controllerを経由してviewが表示されます。
これによって、元のインスタンス変数が上書きされるかどうかが違います。

4行目、6行目↓

“`rb

def create
@group = Group.new (params)
if @group.save
redirect_to root_path, notice: “グループが作成されました!”

元記事を表示

【jQuery】セレクトボックスから取得した日付を現在と比較する方法

#はじめに
セレクトボックスから日付を取得し、`現在の日付`と比較していきます。

#参考文献
「jQueryのchange()で値が変更されたら発動」

jQueryのchange()で値が変更されたら発動


「どうしても「今日の0時」が欲しかった」
https://qiita.com/Bong/items/dc632edb6fe3d44f2d5b

#現在の日付の取得方法
まずは`現在の日付`を取得します。

“`javascript:JavaScript
var current_date = new Date(); //現在時刻の取得
current_date.setHours(0, 0, 0, 0); //時間を00:00:00にする
console.log(current_date); // => Mon Jan 27 2020 00:00:00 GMT+0900 (日本標準時)
“`
今回セレクトボックスでは、時間を入力する項目がないので、
イコールのパターンを再現するために時間を`00:00:00`にしました。

#セレクトボ

元記事を表示

1本の棒を1cmごとに切り分ける(Ruby)

1本の棒があり、それを複数人で半分に切っていって、最終的に1cmのかけらの集合体にします。
ただし、1本の棒を同時に切ることが出来るのは1人だけです。(切り分けられた棒が2つあれば、同時に2人で切ることが出来る。)

#####m人の人がいる時に、長さncmの棒は最低何回で1cmのかけらの集合体になるかを考えていきます。

##考え方
棒の長さとかけらの数、切られた棒の個数と人の数によって処理を変えていきます。

###まずはかけらの個数が棒の長さよりも大きくなった場合の処理を書きます

“`ruby:qiita.rb
def barcutting(people, length, pieces)
if pieces >= length
0
end
end
“`
ここでは、長さをlength(cm)、人数をpeople(人)、かけらの数をpeices(個)とします。
また、barcutting関数を定義し、値が与えられると自動的に切り分ける回数を返す様にします。

piecesは最終的には1cmになっているはずなので、その合計の長さが元々の棒の長さ(length)以上

元記事を表示

Railsで1日以上詰まったエラー

## Railsを始めようとしたらさっそくエラーに遭遇

Railsを始めようとしたらエラーが出て丸一日なにも進みませんでした。
今日はそのエラーを共有します。

以下のようなエラーです

“` ruby
Webpacker::Manifest::MissingEntryError in hogehoge

Showing /Users/yuhiisk/Work/sites/smout/app/views/layouts/application.html.slim where line #10 raised:
Webpacker can’t find application.js in /Users/yuhiisk/Work/sites/smout/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the w

元記事を表示

Leetcode 1295. Find Numbers with Even Number of Digits

“`ruby

require ‘test/unit’
require ‘pry’
class FindNumbersWithEvenNumberOfDigits < Test::Unit::TestCase #https://leetcode.com/problems/find-numbers-with-even-number-of-digits/ def test_calc nums = [12, 345, 2, 6, 7896] output = 2 find_numbers(nums) nums = [555, 901, 482, 1771] output = 1 find_numbers(nums) end def find_numbers(nums) count = 0 nums.each do |num| if num.to_s.size % 2 == 0 count += 1 end end count end end

元記事を表示

Leetcode 977. Squares of a Sorted Array

“`ruby

require ‘test/unit’
require ‘pry’
class SquaresOfASortedArray < Test::Unit::TestCase #https://leetcode.com/problems/squares-of-a-sorted-array/ def test_calc #Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order. input = [-4, -1, 0, 3, 10] output = [0, 1, 9, 16, 100] assert_equal(output, sorted_squares(input)) input = [-7, -3, 2, 3, 11] output = [4,

元記事を表示

Leetcode 1281. Subtract the Product and Sum of Digits of an Integer

“`ruby

require ‘test/unit’
require ‘pry’
class SubtractTheProductAndSumOfDigitsOfAnInteger < Test::Unit::TestCase #1281. Subtract the Product and Sum of Digits of an Integer #https://leetcode.com/problems/subtract-the-product-and-sum-of-digits-of-an-integer/ #Given an integer number n, return the difference between the product of its digits and the sum of its digits. def test_calc #Explanation: #Product of digits = 2 * 3 * 4 = 24 #Sum of digits = 2 + 3 + 4 = 9 #Result

元記事を表示

Leetcode 771. Jewels and Stones

“`ruby

require ‘test/unit’
require ‘pry’
class JewelsAndStones < Test::Unit::TestCase #771. Jewels and Stones #https://leetcode.com/problems/jewels-and-stones/ # You're given strings J representing the types of stones that are jewels, and S representing the stones you have. # Each character in S is a type of stone you have. # You want to know how many of the stones you have are also jewels. # The letters in J are guaranteed distinct, and all characters in J and S are letters. Let

元記事を表示

【初心者向け】ページネーションを付けたページにおける項目番号取得(クラスメソッドの定義まで)

はじめに。
クラスメソッドやんわり理解し始めた人間が書いています。
”クラスメソッド 定義”とかで調べても、初心者には理解仕切れない部分があったので、「こんなこと書いてあれば理解の助けになったな」という内容を書いています。
タイトル通り、ページネーションの話から始まり、最後の方で少しクラスメソッドのこと書いてます。
##前提(環境)
ruby 2.6.3
rails 5.2.4
db PostgreSQL

gem kaminariを使用してページネーションをしています。
##やりたいこと
ページネーションを使用したページで、eachで繰り返し処理したものに、インデクス番号を付けたい。
##問題点
eachで繰り返し処理したものの番号を取得する場合、
“`each.with_index“`
の使用を考えると思います。

“`rails:items_controller.rb
def index
@items = Item.page(params[:page]).per(10)
end
“`

“`rails:index.html.erb
<% @items.each.wi

元記事を表示

Railsのエラーメッセージを日本語で通知するようにする!

# Railsを日本語化する方法
Railsのアプリを作成すると、デフォルトの言語は英語が設定されています。
そのため、ユーザー登録の検証でエラーだった場合、エラーメッセージが英語で出力されてしまい、日本人ユーザーからしたら、なんのエラー?とわかりにくさを感じるかもしれません。。。
今回、ポートフォリオとして作っているアプリで日本語化を実装したので、備忘録をかねてQiitaに残しておこうと思います!

#簡単!日本語化手順
日本語化する手順は以下の2つです。

***- ① 日本語の翻訳情報のダウンロード***
***- ② アプリケーションが参照する翻訳情報を変更***

以上の2つで、検証に引っかかった場合のエラーメッセージを日本語で出力することができます。

以下、それぞれ解説します。

# ① 日本語の翻訳情報のダウンロード
翻訳情報は、Github上にファイルが用意されているため、そちらをダウンロードして使用します。
翻訳情報は以下のコマンドをターミナルで実行することでダウンロードできます。

“`
ターミナル
wget https://raw.githubusercont

元記事を表示

Active Model Serializer をざっくり使ってみた

#はじめに
Railsのプロジェクトで一部json形式でデータをレスポンスを返す必要があった時、インスタンス変数をメソッドで無理やりjsonにして関連付けレコードはmergeで無理やり連結、といった力技でコードを書いていました。
しかし、Active Model Serializerというgemを使えば簡単にjsonデータを整形できるとのことだったので試してみました。

#環境

ruby ‘2.5.1’
rails ‘5.2.4.1’
active_model_serializers ‘0.10.10’

#使用するモデル、アソシエーション

“`ruby:project.rb
class Project < ApplicationRecord has_many :jobs, dependent: :destroy has_many :project_categories, dependent: :destroy has_many :categories, through: :project_categories end ``` ```ruby:job.rb clas

元記事を表示

ReactとRubyで実装する似非ページ番号つきGraphQLページネーション

GraphQLのページネーション実装簡単じゃん!って思ったのですが、ページ番号取得をデフォルトでしてくれないので、色々試行錯誤した結果、GraphQLのページ番号付き(似非)ページネーションがなんとなく実装できたので備忘録的に記録します。

タイトルにもある通りページ番号は似非です。
ページ番号を指定してそれを見にいくことはできませんが、今自分がどこを見ているか表示させます。

####使ったもの
– graphql: 14.5.8
– React: 16.12.0(Hooks使います)
– Ruby: 2.6.2
– Rails: 5.2.3
– material-ui/core”: 4.7.1

####できること
– ページネーションでページ番号を表示(正確には何件目〜何件目の表示)
– 全件数の表示

![Screen Shot 2019-12-17 at 12.25.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312001/7bef98a8-ddd2-3f34-6aa9-9e42618

元記事を表示

【Windows版】RubyとRailsのインストール方法

# はじめに
2020年1月27日時点で、“Ruby 2.5.0“と“Rails 5.2.3“をWindows 10 home(64bit)にインストールした。
RubyやRailsのインストール方法については色々な記事が存在するが、個人的に良いと思った記事に沿って、一部補足しつつ手順を説明する。

なお、本記事の内容は複数バージョンの切り替えには対応していない。
少し古いが、[この記事([2017年]WindowsでRuby on Rails環境構築の概要を知ろう![Ruby])](https://gabekore.org/windows-ruby-rails-overview)などで紹介されている、“Chocolatery“を使う方法が良いのかもしれない。

## Rubyのインストール
Progateの[この記事(Rubyの開発環境を用意しよう!(Windows用))](https://prog-8.com/docs/ruby-env-win)を主に参考にした。

1. まず、MSYS2をインストール
2. Rubyinstallerのダウンロード
3. [こ

元記事を表示

heroku run rails db:migrateするとbash: heroku: command not foundと出た時の対処法

##事象
railsチュートリアル2章の「2.3.5 アプリケーションをデプロイする」において、
$ git push herokuはできていましたが、
$ heroku run rails db:migrateをすると
“bash: heroku: command not found
“と出てしまいました。

##原因
environmentディレクトリ(別の階層)でherokuをcreateしていたからでした。

##対処法
ec2-user:~/environment/toy_appに移動してから
herokuのインストールコマンドを実行。

“`ec2-user:~/environment/toy_app
$ source <(curl -sL https://cdn.learnenough.com/heroku_install) ``` その後、 herokuの新しいアプリケーションを作成。 ```ec2-user:~/environment/toy_app $ heroku create ``` これにより、Railsアプリケーション専用のサブドメインが作成。

元記事を表示

HerokuでRailsタスクを定期実行する方法(Google Apps Scriptのトリガーを使う方法)

HerokuにデプロイしたRailsアプリでタスクを定期実行する方法を紹介します。
ここで示す方法は、Google Apps Script (GAS)を使う方法です。

結論を先に述べると以下のようにします:
1. Railsタスクを作成しておく
2. GASでHerokuのAPI経由でコマンドをpostする関数を書く
3. GASでスケジューラーを作成する(トリガーを作る)

例として、Railsの場合を示していますが、GAS経由で「herokuのコマンドを定期実行する」という点がポイントなので、他の用途にも使えます。言語がRubyである必要性もありません。

この記事では、Railsの記事投稿アプリを例にとります。
スケジューラーを使って、24時間ごとにデータベースのテーブルのレコードを全て削除し、初期データをデータベースに入れる方法を示します。

## 対象読者:プログラミング初心者向け
– 私自身は転職活動中の未経験エンジニアです。内容には正確性を期しますが、間違いがあればご指摘くださると幸いです。
– 初学者がHerokuを使っていて、「Herkouでデータベースを定期的にリ

元記事を表示

RubyでLeetCodeを解いてみた Roman to Integer

https://leetcode.com/problems/roman-to-integer/

>Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.

“`ruby
# @param {String} s
# @return {Integer}
def roman_to_int(s)
arr = s.split(“”)
last_idx = arr.size – 1
sum = 0
arr.each_with_index do |str, idx|
case str
when “I”
if idx != last_idx && (arr[idx + 1] == “V” |

元記事を表示

OTHERカテゴリの最新記事