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

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

rails のparams[:id]の正体

railsでアクションを定義するときに受け取るデータを

“`ruby
params[:id]
“`
と表現することが多かったのだけどいまいち意味がわかっていなかったのでメモ。
同じようなことで悩んでいる方の参考になればと思う。

前提条件

例えばこんな感じで投稿を表示する画面で投稿の詳細を確認する機能を実装したかったとする。Myblog.png
詳細表示するアクションはshowアクションなのでコントローラーにshowアクションを定義しつつそれに対応するビューを用意してあげると良さそう。

showアクションの設定

多くのrailsの学習サイトなどではshowアクションは以下のように表現されていることが多いんじゃないかと思う。

“`ruby
def show

元記事を表示

[Rails5] Rspec -ネスト時の単体テスト-

#・はじめに

Routingネスト時の単体テストについて備忘録として残します。

#1. 前提条件

**まず以下の様にpostテーブルが存在しているとします、**

“`ruby
create_table “posts”, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8”, force: :cascade do |t|
t.string “content”, null: false
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
t.integer “group_id”
t.integer “user_id”
end
“`

**そして以下の様にgroup配下にネストされている状態です。**

“`ruby
resources :groups do
resources :posts, only: %i[new create edit update]
end
“`

#2.結論

元記事を表示

Rails6でドラッグ&ドロップ可能なマークダウンエディタを作成する(Active StorageとSimpleMDEとInline Attachmentを使用)

# 概要

Rails6でQiitaの投稿画面のように、画像をドラッグ&ドロップ可能なMarkdownエディタを作成した際のメモです。

![img.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/9a3ed643-c396-1c0b-b5cb-be8497e39954.gif)

[参考コードはこちら](https://github.com/nobu17/rails_markdown_drag_and_drop)

ちなみにRailsをGWに学んで、このエディタ機能を実装したblogを作成しました。
(Heroku,GCSで構築)
地元の静岡県東部のスポット等を紹介していますので興味があればどうぞ。
[駿河部](https://surugabu.com)

# 環境

Mac OS 10.15.4
Ruby 2.6.3p62
Rails 6.0.2.2

# 使用する機能について

主に3つのOSS及び機能を使用して実装をしています。

– SimpleMDE
– Inline Attac

元記事を表示

Rubyで80行くらいのインタプリタ(コンパイラ?)作った

Rubyの勉強がてら四則演算できるインタプリタっぽいの作りました。

## コード

インタプリタ本体

“`
class Interpreter
def calc(code)
create_tokens(code)
exec(stmt)
end
private
def create_tokens(code)
@tokens = []
while !code.empty?
arr = [
[/^[0-9]+(\.[0-9]+)?/, “num”],
[/^[\+\-\*\/]/, “bin”],
[/^[()]/, “bra”],
[/^\;/, “semicolon”],
]
token = arr.map { |(regex, type)|
val = code[regex]
{ type: type, val: val } if !val.nil?
}.compact.first

元記事を表示

【Rails】impressionistを用いてPV数ランキングの実装

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/bfadc8da-20f1-aff1-473d-9246594ec38f.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)

# 実装

### 1.`impressionist`を導入

**※バージョンを指定する事に注意!(指定しないとエラーが出た)**

“`ruby:Gemfile
gem ‘impressionist’, ‘~>1.6.

元記事を表示

Rspec 導入メモ_Rails

#RSpec学習における技術メモ(導入)

##RSpecとは
rubyにおけるBDD(振舞(ビヘイビア)駆動開発)のためのテスティングフレームワークである。
※テストの概念は別途まとめるため単語のみの理解とする。
##capybaraとは
Webアプリケーションのブラウザ操作をシミュレーションできる他、ブラウザ操作をcapybaraのDSLを用いて直感的に記述できる。
実際にブラウザやHandlessブラウザ(GUIのない)ブラウザを操作可能
##FactoryBotとは
テスト用データの作成をサポートしてくれるgemである。
テスト用データを簡単に用意でき、テストから呼び出して利用することができる。

#導入gem
– Rspec
– Capybara
– FactoryBot
を用いてRubyonRailsのテストコードを記述して行く

##RSpec導入
Gemfileにgemを追加
この際、テストグループのブロックに記入すること
グループ内に記入することでテスト環境のみでgemが有効になる。

※ブロック参照サイト
http://ruby.studio-kingdom.co

元記事を表示

【Ruby】条件演算子が2回(以上)続く時

# きっかけ
以前あるgemのインストールに失敗してしまった時に原因を探っていて、以下のコードにたどり着いたのだが、1行に条件演算子が2回出てきて「これはどういう条件で動くんだ?」と分からなかったのでメモ。

“`ruby
idirs = idir ? Array === idir ? idir.dup : idir.split(File::PATH_SEPARATOR) : []
“`
https://github.com/ruby/ruby/blob/master/lib/mkmf.rb#L1780

# 結論

内側から外側に向かって、順繰りに評価されていく。

“`ruby:irb
> 1 == 1 ? 2 == 2 ? “a” : “b” : “c”
=> “a”
# 2 == 2 が true なので “a” : “b” は “a”, 次に 1 == 1 が true なので “a” : “c” は “a”

> 1 == 1 ? 2 == 0 ? 3 == 3 ? “a” : “b” : “c” : “d”
=> “c”

> 1 == 0 ? 2 == 0 ? 3

元記事を表示

erbファイルをhamlに変換する方法

備忘録のために残します。

#####1、gemを追加

“`ruby:gemfile
gem “haml-rails”
“`

“`:ターミナル
bundle install
“`

#####2、erbファイルをhamlに変換

“`:ターミナル
rails haml:erb2haml
“`

“`:ターミナル
Would you like to delete the original .erb files? (This is not recommended unless you are under version control.) (y/n)
y
Deleting original .erb files.
“`
元のerbファイルを削除するかどうかを聞かれる。
y or n で答える。

以上で完了!
___

hamlはタグを閉じる必要がない為、コード量の削減、簡略化ができるが、インデント管理のため、少しでもずれるとエラーが出る。
でも誰が書いても似たような構造になり、可読性が高いので積極的に使っていきたい。

元記事を表示

[Rails] パンくずリストで多階層のカテゴリーを表示する

# 概要
ancestryで作った多階層カテゴリーを、パンくずリストに表示させます。
パンくずリストの作成にはgretelというgemを使用しました。
今回はECサイトで見られるような、商品のカテゴリーを表示するパンくずリストを作成していきます。
パンくず カテゴリ.png

# 前提
– ancestryを使ってカテゴリーテーブルを作成している。
– カテゴリー一覧ページ、カテゴリー別商品一覧ページ(各パンくずのリンク先のページ)を作成している。

今回解説するパンくずリストの構成は以下のようになります。
トップページ > カテゴリー一覧 > 親カテゴリー > 子カテゴリー > 孫カテゴリー

# 参考記事
多階層カテゴリーの作成にはancestryというgemを使用しています。
導入方法については以下の記

元記事を表示

【Rails】ドラッグ&ドロップ機能の実装(エフェクト付き)

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/644abec1-5b50-5865-618f-942344d9631d.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)

# 実装

### 1.Gemを導入

“`ruby:Gemfile
# 追記

元記事を表示

新人エンジニアが情熱プログラマーを読んだ話

#新人エンジニアが情熱プログラマーを読んだ話

新人エンジニアとなって今はRailsでアプリケーションの開発に携わっている。
エンジニアとして働くならこの本を読んでおけ!的な記事で「情熱プログラマー」を見つけて読んでみたので感想とまとめを書いてみる。
本の詳細な部分には触れないので気になった方は是非とも読んでみんてください

##情熱プログラマー
本の内容としては細かな技術的事柄についてはほとんど触れていない。
コードなんてものは出て来なかった。

プログラマーという職業を通して単に金を稼ぐことでもなく、
社内で出世することでもなく、
楽しくそして、幸せになれるようにという思いが込められていることは、
本を読んでいてとても伝わってきた。

その中でも自分の心に残ったトピックを2つ挙げてみたい。

##既にあなたは時代遅れである

Webエンジニアとして食っていくならRubyをやっておけば大丈夫?
本当だろうか?

こんなことを言ったら
プログラミングスクールの方に怒られてしまうかもしれない。

このトピックは自分の心に最も響いたトピックのひとつでした。
技術はいずれ朽ち果てます。そ

元記事を表示

TECH CAMP 10週間を終えて

遂に!TECH CAMPの全てのカリキュラムが終了しました!
約10週間、長いようでいてあっという間でした。

【これまでの歩み】
・[TECH CAMP入校](https://qiita.com/ruby55tomo/items/ee94693e68b05e875f96 #Qiita)
・[TECH CAMP入校前](https://qiita.com/ruby55tomo/items/75ec0c67752d379213ea #Qiita)
・[TECH CAMP 3週目](https://qiita.com/ruby55tomo/items/14a0877243784619a390 #Qiita)
・[TECH CAMP 4週目](https://qiita.com/ruby55tomo/items/a50f2bbc2100ae82f495 #Qiita)
・[TECH CAMP 5週目](https://qiita.com/ruby55tomo/items/467b5cddb4e228cc383f #Qiita)
・[TECH CAMP 6週目](https://qiita.c

元記事を表示

Qiitaに予約投稿する仕組みを作る【予約投稿編】 ~1日10行コーディング 〜~

## 9日目

前回から発展させてQiitaに自動投稿する仕組みを作りたいと思います。

### 【技術テーマ】
Qiitaへの自動投稿

### 言語
* Ruby

### 目標成果物
Qiitaの自分の下書きを予定日に自動投稿する

### コードと資料

#### 挫折

前回までmechanizeで頑張ってきてたのですが、どうしても投稿する部分ができず、諦めて禁断のseleniumを使うことにしました…
その点だけご了承ください…..

### seleniumで前回までのところを爆速で作る

ただ、seleniumにするとホント…頭使わない脳筋プレイができてしまうんですね…
JSが使えてしまうので….

Gemfile

“`Gemfile
gem ‘selenium-webdriver’
“`

Gemfileに上記のものを追加して、

“`crawler.rb
require ‘nokogiri’
require ‘mechanize’
require ‘selenium-webdriver’

def selemium_init
ua =

元記事を表示

Heroku環境でnatto/mecab gemを使えるようにする

## 目的
Heroku環境にはmecabがインストールされていないので,単純にpushするとビルドで落ちる.
`heroku-buildpack-mecab`とか,`heroku-buildpack-linuxbrew`を使う方法とかいろいろあったけど,
調べてみればみるほどdeprecatedの嵐.
なんとかbuildpackでできないかと試行錯誤した結果が今回の`heroku-buildpack-apt`を使う方法.
`heroku-buildpack-apt`と`heroku-buildpack-ruby`を使って環境を構築した方法を記録.

## 対象
– Heroku上のRails/Sinatra環境でgem natto/mecabを使いたい人
– Dockerには詳しくなくて,Dockerを使わない方法で上の環境を揃えたい人

## heroku-buildpack-apt
– [heroku-buildpack-apt](https://github.com/heroku/heroku-buildpack-apt)
– Herokuチームから公開されているものの,下の

元記事を表示

初めての投稿

# はじめまして
この記事を読んで頂き、ありがとうございます。
はじめまして、クサノと申します。

私は、2020年4月6日から[TECH CAMP](https://tech-camp.in/)というプログラミングスクールに通っており、本日が最終課題発表会であと2日間ほどで卒業となります。

この2ヶ月とちょっとの期間のプログラミング学習でしたが、この短い期間でできることがずいぶんと増えました。
チーム開発も経験させて頂き、こういった場を作って頂いているスクールには感謝しています。

# 自己紹介
軽く自己紹介します。
島から出てきた田舎者です!

1994年8月〜2013年3月
 生まれてから18年間は、長崎県の島に住んでいました。
 海しかない、周りにはおじいちゃんおばあちゃんばかりの緩い学生生活を送っていました。

2013年4月〜2020年1月(内2015年〜2018年は大分県に転勤していました。)
 福岡県にある企業の設備部門で建築担当として勤務。
 簡単な図面を書いたり、工事計画、予算要求、施工会社と契約の取り交わし、
 社内の関係箇所なども含めて調整したり、建築物の保守

元記事を表示

Ruby と Python で解く AtCoder ABC084 D 素数 累積和

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest D – 2017-like Number](https://atcoder.jp/contests/abc084/tasks/abc084_d)*
Difficulty: 981

今回のテーマ、素数 + 累積和

素数と言えば***Ruby***にはPrimeライブラリがあります。
100000以下の素数をハッシュに入れ、`(n + 1) / 2`がハッシュにあるかどうかを確認して、2017に似た数を取得します。
次に、2017に似た数の出現を累積和で求めます。
# Ruby
“`ruby.rb
require ‘prime’

g = Prime::EratosthenesGene

元記事を表示

クラスとインスタントpart2

##前提として

メソッドには2種類
・Rubyに用意されてるもの(gets/puts/chomp/to_iなど)
・自分で作るもの
に分かれる

##クラス

どういうプログラムを作るか、大枠をイメージしたもの
・クラス名
・クラスメソッド
・クラス変数
を峻別して考えましょうね
(峻別できてなかったわよ)

クラスメソッドを作るときは、
共通される処理を繰り返したり、カウントアップするときに使える

##インスタンス
インスタンス変数は個別の処理がなされるので
インスタンス生成は個別に仕分けた処理をしたい時に作る

##self./@/@@/initialize

self.
→クラスメソッド

@
→インスタンス変数

@@
→クラス変数

initialize
→初期設定したいところはここで

元記事を表示

個人メモ Progate Ruby Ⅰ(2)

##6.変数の基本

・変数…値を入れておく箱のようなもの。
変数は「変数名=値」で定義する。

“`
animal = “あざらし”
↳変数名  ↳代入する値
“`

###[注意]
・プログラミングの「=」
⇒「等しい」という意味ではない。

・では、プログラミングの「=」は何か?
⇒「左の変数に右の値を入れる」と言う意味。
この流れを「代入」と言う。

“`
index.rb 置き換えのイメージ

animal = “あざらし”   → animal = “あざらし”
puts animal → puts “あざらし”
↳変数animalが値(“あざらし”)に置き換わる
“`

“`
>_コンソール
あざらし    
“`

##[注意]

“`
animal=”あざらし” >_コンソール

*1.puts animal あざらし
*2.puts “ani

元記事を表示

gem ruby-firebase利用時のquery optionの書き方(備忘録)

Ruby on RailsとFirebase連携時に詰まったうえ、ググっても情報が出てこなかったので備忘録も兼ねて。

FirebaseのRealtimeDataba利用時に便利なgem ruby-firebaseですが、使い方もシンプルで分かりやすいのですが、その分ドキュメントも少なく、あまりこのパターンで使っている人が少ないのか、利用方法もあまり詳しく出てこなかったです。

基本的な使い方はruby-firebaseのGitを見てもらえればOKかなと思います。
https://github.com/oscardelben/firebase-ruby

その上で厄介だったのが、query Optionの存在です。

元々RealtimeDatabaseではクエリー自体少なくあまり便利に使えないので、がっつり使いたい方はFirestoreの方がいいらしいですが(使ったことない)、今回は指定が入ったのでRealtimeDatabaseを使いました。

Firebaseのクエリーについては公式ドキュメントで使用方法が書いていますので見てください。
https://firebase.goog

元記事を表示

ActiveRecordのモデルをキャッシュする時に関連キャッシュを取り除く

# Rails.cacheにmodelをキャッシュする…?
`Rails.cache` などを使い、ActiveRecordのモデルのインスタンスをキャッシュ(==シリアライズして保管)する、ということがある。主にパフォーマンスチューニングのために、DBクエリを減らそう、というような場合。

そのモデルが、`has_many` などの関連(association)を持っている場合、単純にキャッシュにwriteすると、これらの関連のキャッシュが書き込まれてしまう。一件問題なさそうに見えるが、たとえば、関連先のモデルに対して直接アクセスしたりして内容が書き換わる可能性があったりして不都合なこともある。

そういった場合には、モデルをシリアライズ(Ruby的には Marshal.dump) する場合に、この「関連のキャッシュ」を消去してから書いてやる必要がある。

# 結論
キャッシュに書く前に、以下のようにするとよい。

“`ruby
(modelの中で)
@association_cache.clear
Rails.cache.write(…..)
“`
ただし、この

元記事を表示

OTHERカテゴリの最新記事