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

Ruby関連のことを調べてみた2020年09月29日
目次

Rails+JavaScript(jQuery)でタイムレスな検索を

## 記事で扱う検索機能
こんな感じの検索機能です。
今回は、shopsというテーブルからnameというカラムを抽出してビューに表示していきます。
※店舗情報を複数登録済み。そこから任意の店舗を任意のカラムで検索します。

![edc53a4c67fcde418466da618219084f.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503967/1d114bb9-991c-acda-3aa6-c7ef8d490341.gif)

– 非同期で行う
– 文字を打つごとに検索を行い、描画する
– 検索結果をクリックで該当のページにリンクする

おそらくですが、初学者のプログラミングにおける知識レベルや常識レベルって経験者の方が考えるそれよりもずっと低い水準にあると思うんです。
なので、自身にできる範囲内で「そんな事まで説明する必要あるの?」という事も書いて行こうかと思います。

## 開発環境

mac
Ruby 2.5.1
Rails 5.2.3
jQuery

## 必要なファイル
まず、実装に必

元記事を表示

Rubyで、TSVファイルからCSVファイル(BOM付き)への変換

# はじめに
Rubyにおけるタブ区切りのファイル(TSVファイル)から、BOM付きのCSVファイルへの変換方法です。

# 目次
0.完成コード
1.BOMを付けたCSVファイルの作成
2.TSVファイル内データの読み込み
3.CSVに1行づつ読んでは書いていく
4.プログラムを実行

# 0.完成コード
“`ruby:tsv_to_csv.rb

require ‘csv’

# CSVファイルを作成し、bomを付ける。
File.write(“meibo.csv”, “\uFEFF”)

# ‘meibo2.txt’の情報を1行毎に読み込み、splitで配列にして、CSVファイルに1行ずつ入れていく。
CSV.open(“meibo.csv”, “a”, force_quotes: true ) do |meibocsv|
File.foreach(‘meibo.txt’) do |student|
meibocsv << student.chomp.split("\t", -1) end end ``` # 1.BOMを付けたCSVファイルの作成 BOM(

元記事を表示

[Rails]カスタムフォントの設定

# はじめに
アプリ開発でフリーフォントを使用してデザインを変えたのでその使用方法をまとめました。

# 目次
1 フリーフォントの準備
2 フォントの読み込み

# 1 フリーフォントの準備
まず、フリーフォントサイトから自分が使用したいものをダウンロードします。
その後、ダウンロードしたファイル(拡張子ttfまたはotf)をapp/assets/fonts下に配置します。

### 注意事項
フォントはそれぞれ利用条件が異なります。商用可能であっても利用できる範囲に制限があったり、使用時に報告が必要なものもありますので、ご利用の際には必ず配布ページをご確認ください。

# 2 フォントの読み込み
CSSファイルに以下を記述します。

“`css

@font-face {
font-family: “abcdefg”;
src: url(‘/assets/abcdefg.ttf’) format(“truetype”);
font-weight: normal;
font-style: normal;
}
“`

フォントを適用したい箇所にfont-family

元記事を表示

「もっとRust脳を鍛える数学パズル」の試み。

[「もっとプログラマ脳を鍛える数学パズル」](https://www.shoeisha.co.jp/book/detail/9784798153612)をRustで書き直すのは、ボケ防止にちょうど良いかもしれない、と思った。

# P.13 例題1 : メモ化と動的計画法

元のRubyコード(p.015)。

“`ruby:pre1_2.rb
M, N = 10, 100

@memo = {}
def check(remain, pre)
return @memo[[remain, pre]] if @memo[[remain,pre]]

return 0 if remain < 0 return 1 if remain == 0 cnt = 0 pre.upto(M) do |i| cnt += check(remain - i, i) end @memo[[remain, pre]] = cnt end puts check(N, 2) ``` Rustベタ移植。 ```rust:main.rs

元記事を表示

Rubyのメソッド内で引数に再代入してから `super` と呼び出した場合 → 再代入したものが使われる

* 「たしか `super` を引数なしで呼び出したら、現在のメソッドの引数と同じものが渡されるんだっけ」
* 「あれ? 引数に**代入**して上書きした場合[^assign]、元のと新しいののどっちが使われるんだろう?」

[^assign]: 代入でなく破壊的メソッドを作用させただけの場合は、元のも新しいのもオブジェクトとしては同一なので今回の疑問の対象外

と分からなくなったので、実験してみた。

“`ruby
class Foo
def mtd(str)
puts “[Foo:1] str => %p (%#08x)” % [str, str.__id__]
end
end

class Bar < Foo def mtd(str) puts "[Bar:1] str => %p (%#08x)” % [str, str.__id__]
str *= 2
puts “[Bar:2] str => %p (%#08x)” % [str, str.__id__]
super
end
end

Bar.new.mtd(“abc”)
“`

“`tex

元記事を表示

「もっとプログラム脳を鍛える数学パズル」_pp.018-020 (code:Ruby) -> Rust

[「もっとプログラマ脳を鍛える数学パズル」](https://www.shoeisha.co.jp/book/detail/9784798153612)をRustで書き直すのは、ボケ防止にちょうど良いかもしれない、と思った。

# 例題2 順列と組み合わせ(pp.018-020)

## Ruby

なんだか書籍p.018のpre2_1.rbは、正しい答えが出てない気がする。
定義からすると、順列のコードは、

“`
r.upto(n) do |i|
“`

ではない、よな・・・。
ということで、正しい答えが出るコード。

“`ruby:ex2.rb
require “test/unit”

def nPr(n, r)
result = 1
(n-r+1).upto(n) do |i|
result *= i
end
result
end

def nCr(n,r)
result = 1
1.upto(r) do |i|
result = result * (n – i + 1) / i
en

元記事を表示

[初学者向け]削除機能の実装方法

## 投稿内容
今回は削除機能の実装方法について投稿します。
以下のようなボタンを押した際に`destroyアクション`を発動させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/684d1694-c57e-4f1b-0148-af58d5e04598.png)

## コントローラーのアクション

“`items_controller.rb
class ItemsController < ApplicationController #省略 def destroy if @item.destroy redirect_to root_path else render :show end end end ``` 解説) destroyアクションが呼ばれたらインスタンス変数`@item`を削除します。無事削除できた場合は`root_path`へ遷移。削除できなかった場合は`showアクション`へ遷移するようハンド

元記事を表示

働きながら公式テキスト1冊だけでRuby Silverに合格したので勉強法をメモ

## Ruby Silverとは
Ruby技術者認定試験の一種です。
正式名称は
`Ruby Association Certified Ruby Programmer Silver version 2.1:`
となっており、短縮してRuby Silverと呼ばれています。

制限時間は90分で選択式の問題が50問出題されます。
全国にある[プロメトリック](http://www.prometric-jp.com/)という会社のテストセンターでPCを操作して解答します。

Silverのレベルは以下の通り。
>Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基本的な技術レベルを持つことを認定します。
([公式サイト](https://www.ruby.or.jp/ja/certification/examination/)より)

## 受験履歴
75点が合格ライン。
下記の通り、1回目で84点をとって無事合格!

| 受験回数 | 合否 | 点数 |
|:-:|:-:|:-:|:-:|
| 1回目| 合格 | 84点 |

## 受験当時の状況
自社

元記事を表示

【Ruby】メソッドジャンプをしたい!

### はじめに

>環境macOS Catalina10.15.5

Rubyで他の人が書いたソースコードを読むときにメソッドの定義場所がすぐわかるようにメソッドジャンプがしたいなと思い、いろいろ試してたどり着いた方法を書き記します

私はテキストエディタはAtomを主に使っていたのですが、RubyのコードをAtomでメソッドジャンプするのは、いろいろ試しましたがうまくいきませんでした、なので

####結論 VSCodeを使うのが簡単

という事になりまりました

###導入手順

####1.こちらでVSCodeをダウンロード
https://azure.microsoft.com/ja-jp/products/visual-studio-code/

####2.日本語化

– メニューバーからviewを選択
– command palette を選択
– configure display languageを選択
– install additional languageを選択
– Japanese Language Pack for Visual Studio Code

元記事を表示

【Ruby】リファクタリングに強くなるための基本のキ

 恥ずかしい話ですが、つい最近まで「綺麗なコードを書け」と言われると、条件反射的に「エラーがなけりゃいいじゃん。」と思っていました・・・。
 しかし、リファクタリングという言葉を理解しながら、いくつかの記法やメソッドに触れていくうちに、美しいコードを美しいと思えるようになってきた(すこし大袈裟:sweat_smile:)ので、基本的なリファクタリングの事例を紹介したいと思います。

###今回設定するインプットとアウトプット
 1から5までの連続する配列の合計を出力せよ。(答えは15)
 これをいかに綺麗に記述して導き出すかに挑戦してみたいと思います。

####その1:ザ・ごり押し
“`rb
p 1 + 2 + 3 + 4 + 5
“`
 …プログラムというか電卓?レベルの一番シンプルな記述。当然、1~100までの数字の合計を求める場合等に対応できないのでボツ。
拡張性を持たせていきたい。

####その2:配列とeach文を使う
“`rb
numbers = [1,2,3,4,5]
sum = 0 #変数sumに0を代入
numbers.each do |n|
sum

元記事を表示

【Rails】ビューファイルは使わず、パラメータIDも存在しない中で、アソシエーションのデータを取得する。【APIモードで使う】

## はじめに
備忘録です。

ここでは、ホーム画面(”/”)で

* `「データ全件」`
* `「1つのデータに関連付けされているデータの総数」`
* `「1つのデータに関連付けされているハッシュのデータ」`

を表示させたいとして、indexアクションにて上記のデータを取得する方法について見ていきます。
例えばQiitaのようなアプリケーションを作成するとするならば、

* `「記事全件」`
* `「1つの記事に関連付けされているコメントの総数」`
* `「1つの記事に関連付けされているタグのハッシュデータ」`

を取得していくようなイメージです。

`全てのデータはハッシュとして取得します。`

## 環境
Ruby: 2.6
Rails: 5.2

## モデルの例(作成の過程は省略)

![スクリーンショット 2020-09-28 23.12.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606750/27fc22be-fca1-58f4-adbb-a68dc3aa01da.png)

元記事を表示

【No.003】発注者の注文一覧画面を作る

[Issue](https://github.com/fukadashigeru/import_agent_app/issues/7)
[PR](https://github.com/fukadashigeru/import_agent_app/pull/8)

# 概要
発注者の管理画面をつくる

# ToDoリスト
– [x] Order::OrderingOrgSidesController追加
– [x] routes.rbをいい感じに
– [x] Orderモデル追加
– [x] Orderのレコードを作成する内容をseedに追加
– [x] Slimの導入
– [x] TailWindの導入
– [x] 見た目をFigmaに近づける

# ToDo詳細
## Order::OrderingOrgSidesController追加

ターミナルで下記をたたく。

“`
bin/rails g controller order::ordering_sides
“`

app/controllers/orders/ordering_org_sides_controller.r

元記事を表示

中二男子が一度は言ったことがある「無限ループ」

#無限ループとは
eachメソッドやwhile文で、繰り返し処理をしたときに、終わりがなく、永遠に処理を繰り返している状態。もちろん、パソコンへの負荷がかかる。
##具体例
“`Ruby
number = 0
while number >= 0
puts number
number += 1
end
“`
numberに1をたし続けて、出力していく。

##while文
“`Ruby
while 条件式
#条件式が真であるときに繰り返す処理
end
“`
if文のように、条件式が真でないと、処理は実行されない。trueと条件式に入れれば、確実に繰り返される。
##無限ループを止める方法
breakを使う。
例えば、

“`Ruby
number = 0
while number >= 0
if number == 100
break
end
puts number
number += 1
end
“`
if文を用いて、numberが100になったら、処理を終了させる。つまり、最後の出力は99になる。
##ポイント

– [x] while文は条件式が真のと

元記事を表示

[rails6.0.0]ウィザード形式でActiveStorageを使用して画像を保存する方法

## 概要
ユーザー登録とプロフィールをさせる時に、ウィザード形式でフォームを作成。
プロフィールに画像を保存したかったが上手くいかなかったため備忘録として記載。
※検索しても同じ状況の方がいなかったので役に立てばと思います。

ウィザード形式とは何か?という方は[こちらを参考にしてください](https://qiita.com/ATORA1992/items/40fc543742a6df5a17c1)

## 内容
##### 開発環境
MacOS Catalina 10.15.6
Rails 6.0.0
Ruby 2.6.5

#### テーブル構成

deviseを使ってユーザー登録をさせようとしています。
userテーブルはnicknameのみ追加。
profileテーブルにはtwitterのリンクなど記載。
profileテーブルにactive_strageで画像を保存したい。

### ウィザード形式を実装
ここらへんの機能の実装に関しては
[こちらの記事](https://qiita.com/Tatsu88/items/7447a669b788b011e96b)がかなり近

元記事を表示

[Ruby]sprintfで四桁のランダムな番号生成

##目的
PINコードを生成したかったのでsprintfとrandメソッドを使った。

## コード
“`
sprintf(‘%04d’, rand(10000)) //四桁に対して、余ったところを0で埋める
=>”1184″
“`
※ dは数字を意味する。(sならstring)

##その他

“`
sprintf(‘%10d’, rand(10000)) //幅10の右づめ
sprintf(‘%-10d’, rand(10000)) //幅10の左づめ
=> ” 7179″
“`

元記事を表示

Markdown記法について

今回がQiita初投稿になります。よろしくおねがいします。

####「プログラミング知識をMarkdown記法で書いて共有しよう」

と、Qiitaの投稿画面の一番初めにもデフォルトである通りQiitaにしろREADMEにしろGitHubのプルリクエストにしろプログラミング業界ではMarkdown記法というのがちょいちょい出てくるんですね。
自分も初めの頃は参考のサイトを見て少しやろうと思いましたが、~~案外やり方が多くて面倒になり~~別にまだ覚えなくてもいいかと思っていたのですが最近になり少しずつやり方が分かってきたので備忘録的な意味と自分の練習もかねて投稿しようと思いました。

まず初めにMarkdownについてですが

##Markdownとは
Markdown(マークダウン)は文章を記述するための記法(マークアップ言語)の1つです。
Markdownとは、メールを記述する時のように書きやすくて読みやすいプレーンテキストをある程度見栄えのするHTML文書へ変換出来るフォーマットとしてジョン・グルーバーによって開発されました。
以下の特徴があります。

– 簡単で覚えやすい記述

元記事を表示

データベースのカラムなどを修正したい場合

#db:migrateしたデータベースを修正したい場合

プログラミングスクールでのチーム開発学習中にデータベースの修正を行いたかったのですが、
細かい部分の知識が抜け落ちていたので、備忘録用にまとめてます。

データベースの操作に慣れていない方や、これからデータベースを学習する方の参考にもなれば幸いです。

###開発環境
DB: MySQL
Rails: 5.2.4.3

## まず自分が修正したいデータベース(テーブル)の確認を行いましょう
“`:ターミナル
% rails db:migrate:status
“`
すると、テーブルがこの様に出てくると思います(出てくるテーブルの数や名前はそれぞれ違ってきます)

“`:ターミナル
Status Migration ID Migration Name
————————————————–
up 20200823051138 Devise create —-s
up 20200824122031 Create —

元記事を表示

form_objectで親子関係のあるフォームを作成する(テストも書いてます)

### 背景
`@shop`に紐づく`@comment`、`@employee`など、様々な子要素があるテーブルがあります。初回情報登録時には、`@shop`、`@comment`、`@employee`など、親要素と一緒に全ての子要素も一緒に保存できるようにしていたのですが、

下記の記事のような形で、`accepts_nested_attributes_for`を用いてこれらを実現していたものの、

▼こんなふうに実現していました
[fields_forで子テーブルのデータを一気に作成する(テストも書いてます)[Rails][Rspec]](https://qiita.com/tanutanu/items/c82c1ed2f5fa78a58366)

そのうち、`@shop`だけの編集フォームや、`@comment`、`@employee`などの投稿・編集フォームも必要になってきたため、だんだん`model`が様々な記述で肥大化してきました。

### form_objectとは?
↑上記のような状態の時に、特定のフォームに関するバリデーションやデフォルト値の設定などを一箇所に集め

元記事を表示

【Rails】 binding.pryの活用方法

この記事では、binding.pryの使い方を解説しています。
 
binding.pryを活用することで、
・一次ソースに触れる機会が増え、学習効率が上がる
・binding.pryを複数設置して、paramsの流れが理解しやすくなる

など、たくさんメリットがあります。
 
自分みたいな、初学者方の参考になればと思い、記事にしてみました。
前提

チャットアプリを題材にbinding,pryの使い方を学びます。
(注意:この記事ではチャットアプリは完成しません!チャットアプリ作成の記事ではありません)

開発環境
・ruby 2.6.5
・Rails 6.0.3.3

完成イメージ

![chat_demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516687/b8e22694-826c-f4fc-9788-81f9c30d1180.gif)

ER図

![名称未設定ファイル (1).png](https://qiita-image-store.s3.ap-north

元記事を表示

rails5.2.4 で作成した既存のアプリを5.1.6にダウングレードする

rails5.2.4で開発を進めていたのですが、既存のサービスとバージョンを合わせて管理がしたかったため、ダウングレードを選択しました。
環境はdockerで構築しているため、 ローカルの場合は使用しているPC等のrailsのバージョン変更が必要になります。

##手順

###1.Gemfileのrailsのバージョンを書き換える

“`PHP:Gemfile
gem “rails”, “5.1.6”
“`

###2.bundle update (dockerのサービス名はwebにしています)

“`
$ docker-compose run web bundle update
“`

### 3.configの書き換え

application.rbのconfig.load_defaultsが5.2になっているので、5.1に変更

“`PHP:application.rb
config.load_defaults 5.1
“`

### 4.Active Recordの設定解除
application.jsのactive_storageの行を削除

“`

元記事を表示

OTHERカテゴリの最新記事