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

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

【AtCoder】ABC182のD問題をRubyで解く

## 問題

[AtCoder Beginner Contest 182](https://atcoder.jp/contests/abc182)

[D – Wandering](https://atcoder.jp/contests/abc182/tasks/abc182_d)

> 数列$A_1, A_2, A_3, …, A_N$が与えられます。 この数列は負の要素を含むかもしれません。
> 数直線上の座標$0$に置かれているロボットが、以下の動作を順に行います。
>
> 正の向きに$A_1$進む。
> 正の向きに$A_1$進み、正の向きに$A_2$進む。
> 正の向きに$A_1$進み、正の向きに$A_2$進み、正の向きに$A_3$進む。
> ⋮
> 正の向きに$A_1$進み、正の向きに$A_2$進み、正の向きに$A_3$進み、$…$、正の向きに$A_N$進む。
>
> 動作開始時から終了時までのロボットの座標の最大値を求めてください。

## 制約

> $1≦N≦200000$
> $-10^8≦A_i≦10^8$
> 入力はすべて整数

## 入力

> $N

元記事を表示

【Rails/ActiveRecord】createとcreate!の違いについて

# 概要

新規レコードを作成するActiveRecordメソッド“create“について。
“create“と“create!“の違いについて学んだので解説します。

# 結論 : 例外を発生させるかどうか

“!“の有り無しで何が違うのか。
“結論「例外を発生させるかどうか」“です。

とはいえ「例外」というのもわかりにくいですよね。
あくまで実際に起こる違いで説明すると、“!“の有り無しで変わるのは、処理に失敗した時に“「あの赤い画面がでるかでないか」“です。

## “create!“の場合

“create!“にした場合、バリデーションに引っかかると、下記のようにActiveRecord::RecordInvalid例外が発生し、おなじみの画面が表示されます。

![domo](https://gyazo.com/f173d45a56ba8d27b43c4820effab48f/raw)

実際の動作を追ってみましょう。

今回用いたコードは次の通りです(※createアクションの記述は非推奨です)。

### ①

元記事を表示

チャート式ruby-IV(Recursive Fibonacci)

# お題:Fibonacci数列

fib(n) = fib(n-1)+fib(n-2)
0 1 1 2 3 5 8 13 21 …

をrecursion(再帰)で求めなさい.

# 解説

以下はTDDのバイブルのKent Beck本[^TDDbyKentBeck]に載っていたののアレンジです.chart式の解法,解説,発展のサイクルがめちゃくちゃ短くなって,TDDのred, green, refactoringに対応している感触を掴んでください.

[前回](https://qiita.com/daddygongon/items/f6cea87314ee26e130ea)作ったassert\_equal.rbをcodes(作業directory)にcopyしておいてください.

# fib(0) = 0

Fibonacci数列の初項は0です.

1. **red** まずは表示させてみます.

“`ruby
p fib(0)
“`

ないよね.
2. **green** そこで,defします.

元記事を表示

[Rails]newメソッド,saveメソッド,buildメソッド,createメソッドの違いについて勉強してみた

Railsと日々格闘している「超」がつく初心者です。
自分自身の知識の整理のために、共有します。
#オブジェクトを作成する系のメソッドって何か多くない?
テキストを流し読みしていると、なかなかこの事実に気付かなかったのですが、先日
「あれっ、newメソッドかと思ったら、ここではcreateメソッドを使うのか…
ってかよく考えたら、buildとかもあるよな…What?!」
という状態になってしまったので、自分なりに調べてみようと思いました。
短い記事ですが、最後までお付き合いください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/824345/d2d925f9-227d-2698-c6bb-717abb782d55.png)
#newメソッド & saveメソッドについて
まずは、newメソッドの基本的な使用方法から。
ちなみに、Bookモデルで投稿する前提で書いています。

“`ruby:books_controller:rb
def new
@book = Book.n

元記事を表示

Rails【初心者向け】コメント機能の実装

railsでコメント機能の実装についてまとめました。
#前提
Ruby on Rails での開発環境が整っている。
Posts(投稿テーブル)とUser(ユーザーテーブル)は既に作成してある。
Userテーブルはgem deviseを使っている。
今回は投稿に対してコメントを実装します。

# コメント機能の実装

## 1.Commentモデルの作成

作成するCommentsテーブルの詳細とリレーションに関して以下の通りです。
![スクリーンショット 2020-11-11 6.28.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680641/ac975198-5d3e-107f-6e2f-d5515e8f5a6b.png)

###ターミナルでモデル作成
“`terminal
$ rails g model comment
“`
###マイグレーションファイルの記述
“`ruby:20********_create_comments.rb
class CreateComments <

元記事を表示

Rails(turbolinks)でページの初回読み込みがうまくいかない時に考えること

# 初投稿
初投稿になりますのでお手柔らかによろしくお願いします。

# 環境
Ruby 2.6.5
Rails 6.0.3.2

# 概要
Railsでのアプリケーション作成においてページ遷移した際に挙動がうまくいかないことがありました。

私自身、結構詰まってしまった箇所なので備忘録として残しておきます。
また同じように詰まってしまった人へ少しでもgiveできれば良いなと思っています。

# 達成したいゴール
ページの初回読み込みがうまくいかない人へ1つのヒントとなるような情報を提示すること。
turbolinksを使用している際にページの読み込みを考える。

# 解決したい問題
Railsのturbolinksを使用している際にページの初回読み込みがうまくいかないこと。

# turbolinksとは
・turbolinksとはRails4.0からデフォルトで導入されたgem
・turbolinksとは画面遷移を高速化させるライブラリ(画面全体を更新するのではなく、画面の一部だけを更新する)
・turbolinksが原因でJavaScriptが上手く機能しなくなる場合がある

#

元記事を表示

Fizz Buzz(Ruby編)

#Fizz Buzzを解く(Ruby編)
#問題
整数 N が入力として与えられます。

1からNまでの整数を1から順に表示してください。

ただし、表示しようとしている数値が、

・3の倍数かつ5の倍数のときには、”Fizz Buzz”
・3の倍数のときには、”Fizz”
・5の倍数のときには、”Buzz”

を数値の代わりに表示してください。
#入力される値
入力は以下のフォーマットで与えられます。

N

N は1以上N以下の整数です。
#期待する出力
最後は改行し、余計な文字、空行を含んではいけません。
#入力例
20

#出力例
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
#私の答え
“`java:
num = gets.to_i
(1..num).each do |n|
if n % 15 == 0
puts “Fizz Buzz”
elsif n % 5 == 0
puts “Buzz”
elsif n

元記事を表示

Rasilsのデータ保存,更新,削除

本投稿の目的

・Railsのcontroller操作(①保存,②更新,③削除)についての議事録です。

学習に使った教材

Udemyの [“はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう”](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。

①保存(create)

・新規で作成した値をdbへ反映し保存する

“`ruby:qiita.rb
def create
@インスタンス = モデル.new(キー1: 値1, キー2: 値2)
@インスタンス.save
end
“`

【解説】
○@インスタンス = モデル.new(キー1: 値1, キー2: 値2)
⇨dbへ値をインスタンス変数を経由して格納する

○@インスタンス.save
⇨⇨インスタンス変数を保存

②更新(updae)

・すで

元記事を表示

氏名をローマ字に変換しようとして、ローマ字の闇に飲み込まれた

大量の氏名(のふりがな)をローマ字に変換する必要が生じたため そういう gem が無いか探してみたものの、一般的な文章をローマ字に変換するものはあった(例:[Romaji](https://github.com/makimoto/romaji))ものの 「氏名」に特化したものは見つからなかったので、せっかくだから自分で作ってみました。

– [Namae2Romaji](https://github.com/nodai2hITC/namae2romaji)

これを使うことで、99% の氏名を適切にローマ字に変換することができます!

…さて、『「氏名」に特化?普通の文章でも氏名でもローマ字なんて同じでしょ?』『「99% の氏名」?ローマ字なんて 100% 正確に変換しろよwww』などと思った方もいらっしゃることでしょう。

ところが、調べてみるとなかなかにローマ字の世界は闇が深かったのです…

# 氏名のローマ字変換について

ローマ字氏名が必要になるときといえば、パスポートの申請です。外務省がパスポート申請における表記について説明してくれていますが、これによると一般的なローマ字とは

元記事を表示

【備忘録】Ruby 基本事項一覧

#プロローグ
Rubyで色々な問題を解いていて、配列や繰り返し処理の使い方、メソッドなどなどを1度整理したいと思い、投稿いたします。
誤っている部分がございましたら、ご教授頂けますと幸いです?‍♂️

プロを目指す人のためのRuby入門を中心に、様々な記事を参考にして自分なりに書いていきます。
最後に参考記事を載せておきます。

自分が学習したものを随時載せておくので、順番がおかしいかもしれませんが、ご了承頂けますと幸いです。

#配列や繰り返し処理
– for文

##for文

:for文の中で作成された変数は、for文の外でも参照できる

“`ruby:Qiita.rb

for 変数 in 配列など (do) #doは省略可能
繰り返し処理
end

“`

例1

“`ruby:Qiita.rb

numbers = [1,2,3] #決まった配列
sum = 0 #初期値
for n in numbers #numbersの値を1つずつnにいれる
sum += n #0+1=1, 1+2=3, 3+3=6 と代入し計算
end

sum #合計値6を出力

`

元記事を表示

if文を使う時に気をつけたいこと

#はじめに
 毎日、Rubyの問題を解いている中で、if文を使うことが圧倒的に多いので、考え方をまとめておく。

##if文を使う時に考えたいこと
1. 戻り値が真偽値かどうか
2. 条件文の順番
3. elseを追加するかどうか

###1. 戻り値が真偽値かどうか
 条件文には、真偽値が入るようなものでなければならない。
例えば、

“`ruby
str = “abc”
if str.include?(“a”)
puts “OK”
end

if str
puts “NG”
end
“`
`include?メソッド`は引数にしたものがあれば、`true`をなければ、`false`を返す。
そのため、一つめのif文では`a`があるため、`true`が返り、処理が実行される。
しかし、二つめのif文では条件文のところがただの変数のため、うまくいかない。

条件文がtrueかfalseの判断をするメソッドか考える
###2. 条件文の順番

“`ruby
if 条件文1
#条件文1がtrueのときの処理
elsif 条件文2

元記事を表示

【Ruby/Rails】ハッシュタグ検索で入力される文字をいい感じに置換させるメソッド集

# はじめに
## やりたいこと
– ハッシュタグ検索で入力された全角ハッシュを半角に変換したい
– 全角数字を半角にしたい
– そもそもハッシュを取り除いて検索させたい

## やる理由
– ユーザーがどんな入力の仕方をしてもいい感じに置き換えて出力したい

# メソッド
– trメソッド
– deleteメソッド

## trメソッド
第一引数を第二引数に変換するメソッド

“`ruby:sample.rb
str = ‘一郎’
puts str.tr(‘一’, ‘二’)

# 結果 => 二郎
“`
これをモデルに定義したsearchアクションに追記

デフォルトのsearchアクション

“`ruby:models/hashtag.rb
def self.search(search)
if search != “”
Hashtag.where(‘name LIKE(?)’, “%#{search}%”)
else
Hashtag.all
end
end
“`

trメソッドを追記したsearchアクション

“`ruby:models/ha

元記事を表示

【必須】Rubyでコメントアウトする方法

#「Rubyでコメントアウトする方法」

# ここにコメント
_1行のコメントを書く_
****
=begin
ここにコメント
=end
_「=begin」から「=end」の間に書く(複数行書ける)_

元記事を表示

rubocopのエラー Layout/EndOfLine: Carriage return character missing. 【Windows】

###経緯
Railsでアプリを作っている初学者です。
Rubocopを導入したところ、
windowsの改行コードのエラーがなかなか解消出来なかったので、まとめました。
同じ様に悩んでいる方の参考になると嬉しいです!

バージョン
Ruby : 2.6.5
Rails : 5.2.4

###エラーの内容

rubocopをすると、こんなエラーが。

“`
Offenses:
Rakefile:1:1: C: Layout/EndOfLine: Carriage return character missing.
# Add your own tasks in files placed in lib/tasks ending in .rake, …
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/channels/application_cable/channel.rb:1:1: C: Layout/EndOfLine: Carria
ge return character

元記事を表示

Facebookクローンを作成したメモ

画像のプレビュー機能実装

#はじめに
Railsでオリジナルアプリを制作しています。このアプリに画像投稿機能を実装しました。画像をアップロードした後(データベースに保存する前)の状態でプレビューを表示しましたので、書き記します。
※コードひとつひとつに解説を挟むので、最後に完成コードを載せています。

#目次
1.事前準備
2.プレビュー機能の実装

#1.事前準備
JavaScriptを使用しますので、jsファイルを準備します。ページが読み込まれたときに動作するように定義します。

“`js:app/javascript/packs/preview.js
document.addEventListener(‘DOMContentLoaded’, function(){
const ImageList = document.getElementById(‘image-list’);
});
“`

なお、getElementByIdで取得するimage-listは、html上のdivタグのid名です。このdivタグにプレビューを表示します。そのため、htmlに追記します(今回は送信ボタンの下に配置しま

元記事を表示

stripeを使いECサイトを作る!(アカウント作成編)

####プチ宣伝
https://www.code-sell.net/
コードを販売できるサービスを作りました!いらないコードがある方はぜひ使ってく見てください。ちなみにこの記事で説明するstripeを使用しています。

#初めに
https://qiita.com/UTOG/items/6a00135a5114a70727c3
の続きです。

前回は購入機能を作りました。今回はstripeアカウント作成(StandardとCustom)をやっていこうと思います。ただ前回deviseの新規登録機能からやるといいましたがそれだと記事が長すぎてしまう(普通に面倒…)し特に珍しい設定とかはしないのでdeviseは導入してる前提にします。

deviseの導入方法は下の記事を参考に。ツイッター認証やメール認証機能はいりません。
[[*Rails*] deviseの使い方(rails6版)](https://qiita.com/cigalecigales/items/16ce0a9a7e79b9c3974e)

スタンダードアカウント作成の時の
[参考記事](https://qiita.co

元記事を表示

チャート式ruby-appendix-V(thor, rubocop)

\![Mac OS X-10.15.7]() \![ruby-2.7.1p83]()

# thor

コマンドらしくする必要があります.これはRakefileに似たDSLで実現できます.

そのためには,

gem install thor

してください.

さらに,

“`ruby
require ‘thor’
require “hello_rudy/version”

class HelloRudyCLI < Thor desc "hello NAME", "say hello to NAME" def hello(name) puts "Hello " + name end end HelloRudyCLI.start(ARGV) ``` と修正するとほぼ動きます.CLIという文字列がclass名にないとダメです.

元記事を表示

チャート式ruby-appendix-V(rubular)

\![Mac OS X-10.15.7]() \![ruby-2.7.1p83]()

# 正規表現regular expression

文字情報を取り出す便利ツールが正規表現(regular expression)です.これって覚えようとして挫折したことないですか?私はRegExpを10年以上使えなくて,本を何冊もトライしたんですが,途中で諦めました.でもね. でわずか10分でバリバリ使えるようになってました.コツは,やっぱりTDDです.

| ![img](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151211/c463deb2-a22d-2af9-14e5-41c55fd77478.png)|
|:——————-

元記事を表示

OTHERカテゴリの最新記事