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

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

【jQuery】RailsでValidation Pluginを使った動的なバリデーションチェックの実装その1

# はじめに
本記事がQiitaでの初投稿となります。
プログラミングスクールで開発中のECサイトアプリでjQueryのプラグインを使って
動的なバリデーションチェック機能を実装しました。
実装手順とRailsで使用する場合の注意点をシェアします。

# 開発環境
Ruby 2.5.1
Rails 5.0.7.2
jQuery 3.4.1
jQuery Validation Plugin 1.19.1
Haml 5.1.2
Sass 3.7.4

# jQuery Validation Pluginとは
jQuery Validation Pluginはバリデーションチェックが実装できるjQueryのプラグインです。

公式サイト:https://jqueryvalidation.org/

# やりたいこと
+ 入力フォームにユーザー情報を入力する際にリアルタイムにバリデーションをチェック
+ バリデーションエラーがある場合はエラーをリアルタイムに表示
+ バリデーションがNGの場合は入力欄が赤色、OKの場合は緑色に変更

# なぜjQuery Validation Pluginを選

元記事を表示

【Rails】Rspec何言ってるか解読してみた件。コントローラー#new編

今回は、**写真とタイトルを投稿するアプリケーションのtweetsコントローラーのnewアクション(新規ツイート投稿画面を呼ぶ)が問題なく動くかどうか、Rspecという言語を使って**テストコードを記述。

spec/controllers/tweets_controller_spec.rbに、**擬似的にnewアクションを起こすリクエストを飛ばして、ちゃんとnewアクションに対応したビューが返ってくるかな?**というテストコードを記述。

コントローラーのテストをする際は、2つの点に注意。
①tweets_controller.rbに、テストしたいアクションに対して、before_actionが定義されていないこと。
②gem ‘rails-controller-testing’をインストールしよう。

では、見てきましょう。

“`ruby:tweets_controller_spec.rb
require ‘rails_helper’

describe TweetsController, type: :controller do
describe ‘GET #new’ d

元記事を表示

github actions rspec

### 成果物

“`yml:.github/workflows/ruby.yml
name: Ruby

on: [push]

jobs:
build:

runs-on: ubuntu-latest

services:
postgres:
image: postgres:10.3
ports: [“5432:5432”]
options: –health-cmd pg_isready –health-interval 10s –health-timeout 5s –health-retries 5
steps:
– uses: actions/checkout@v1
– name: Set up Ruby 2.5
uses: actions/setup-ruby@v1
with:
ruby-version: 2.5
– name: Install PostgreSQL client
run: |

元記事を表示

Rack入門 Rack Middleware編 (3/3)

[前回](https://qiita.com/nishio-dens/items/852d7604b34d20514a70) は、Rackのプロトコルを理解するために簡単なアプリを作りました。
今回はRackの重要な概念であるRack Middlewareについて学びます。

## 目次

1. [Rack入門 概念編(1/3)](https://qiita.com/nishio-dens/items/e293f15856d849d3862b
)
1. [Rack入門 Rack Application編 (2/3)](https://qiita.com/nishio-dens/items/852d7604b34d20514a70)
1. [本記事] [Rack入門 Rack Middleware編 (3/3)](https://qiita.com/nishio-dens/items/8011842f50995f46eafe)

## Rack Middlewareとは

はじめにややこしいことを言いますが、Rackはミドルウェア(Middleware)です。
アプリサーバーとフレーム

元記事を表示

Rack入門 Rack Application編 (2/3)

[前回](https://qiita.com/nishio-dens/items/e293f15856d849d3862b) はRackが必要とされた背景と、基本的な概念について説明しました。
今回は実際にRackプロトコルを使いアプリサーバーと通信するプログラムを作りながら、Rackに関する理解を深めていきます。

## 目次

1. [Rack入門 概念編(1/3)](https://qiita.com/nishio-dens/items/e293f15856d849d3862b
)
1. [本記事] [Rack入門 Rack Application編 (2/3)](https://qiita.com/nishio-dens/items/852d7604b34d20514a70)
1. [Rack入門 Rack Middleware編 (3/3)](https://qiita.com/nishio-dens/items/8011842f50995f46eafe)

## Hello Rack Application

基本を理解するために、簡単なRackアプリケーションを作っ

元記事を表示

Rack入門 概念編 (1/3)

RailsやSinatraなどのRuby製Webフレームワークを利用されている方は、Rackというキーワードを一度は目にしたことがあるのではないでしょうか。

よく聞くけど詳しくは知らない、そんなやつがRackです。

今回は自分の知識の整理も兼ねて、Rackとは何ものなのかについて調べたメモを、ここに残します。長かったので、全3回に分割しています。

## 目次

1. [本記事] [Rack入門 概念編(1/3)](https://qiita.com/nishio-dens/items/e293f15856d849d3862b
)
1. [Rack入門 Rack Application編 (2/3)](https://qiita.com/nishio-dens/items/852d7604b34d20514a70)
1. [Rack入門 Rack Middleware編 (3/3)](https://qiita.com/nishio-dens/items/8011842f50995f46eafe)

## Rackとは何か。ひとことで

– Webアプリケーションサーバーとアプリ

元記事を表示

【Rails】devise_token_authで新規ユーザー登録時にUnpermitted parameters: が出たときの対処法

## はじめに
gem **devise_token_auth**を使っていて、新規ユーザー登録時に以下エラーが出たときの対処法を残します。

“`shell
Unpermitted parameters: 保存されて欲しいカラム名
“`

**自分でUserテーブルにカラムを追加して、保存しようとしたら**
発生する内容です。

今回、自分の場合は`:age`と`:gender`を追加しようとしたところ発生しました。(以下参照)

“`shell
Unpermitted parameters: :age, :gender
“`

これを解決していきます。

## 環境
“`yaml
OS: macOS Catalina 10.15.1
zsh: 5.7.1
Ruby: 2.6.5
Rails: 6.0.2.1
“`

## 結論:`registrations_controller`に追記

“`ruby:registrations_controller
class Api::V1::Auth::RegistrationsController < DeviseTokenA

元記事を表示

#Stripe API / サブスクリプションのスケジュール登録が開始済みでも予約中でも SubscriptionSchedule を Update してキャンセル登録する例 / #Ruby

# points

– 1ヶ月サイクルのプラン1個だけをスケジュール登録して、あとから end_date = キャンセル日を登録する場合
– Subscription に対してであれば Update で cance_at を登録すれば良いのだが、SubscriptionSchedule が開始していない場合は、そもそも Subscription が発生していないため、できない
– どちらの場合も SubscriptionSchedule への update で APIリクエストを完結させたいが、SubscriptionSchedule はちょっと癖があるやつ
– SubscriptionSchedule が active = 開始している場合は、 current_phase.start_date を起点に、そこから数ヶ月後の end_date をぴったりと指定する。なぜなら中途半端な日時を指定すると、日割り計算的な請求が発生してしまうから。
– SubscriptionSchedule が not_started= 開始していない場合は、 未来に開始される最初のフェーズ = phass

元記事を表示

3ヶ月で Rails 4.2 → 5.2 にした軌跡

## 概要
[資格スクエア](https://www.shikaku-square.com/)の PM をやっています岩瀬と言います。[資格スクエア](https://www.shikaku-square.com/)は、法律系難関資格に特化したオンライン学習サービスです。

サービスを開始してから数年が経ち、1つの大きな問題がありました。それは Rails のメジャーアップグレードです。

長年の負債が溜まっていたので、なかなかメジャーアップグレードできずに苦しんでいたのですが、フリーランスのカルパスさん([yhirano55](https://github.com/yhirano55))の加入で一気に進みました。

カルパスさんが方針を考えて実装し、それをレビューでサポートしたラスタムさん([rastamhadi](https://github.com/rastamhadi))はじめ、チーム一丸となって取り組んだ結果、わずか3ヶ月で成し遂げられるミラクルを目撃したので、その内容をまとめました。

## 記事の目的
テストカバレッジが低くても、Rails のメジャーアップグレードがで

元記事を表示

Stripe API / Update SubscriptionSchedule and set cancel_at / started case and not started case / without “adjusted” Upcoming invoice / Ruby code example / #Stripe #API #Ruby

# Docs

– https://stripe.com/docs/billing/subscriptions/subscription-schedules
– https://stripe.com/docs/billing/subscriptions/subscription-schedules/use-cases
– https://support.stripe.com/questions/create-update-and-schedule-subscriptions

# Code

“`rb
# Docs

# https://stripe.com/docs/billing/subscriptions/subscription-schedules
# https://stripe.com/docs/billing/subscriptions/subscription-schedules/use-cases
#
# https://stripe.com/docs/api/subscription_schedules/release
# https://support.st

元記事を表示

railsのDBで型をintegerからfloatへ変更しnumber_fieldで小数点を扱えるようにする

前回の記事の続きで初めてfloat型を扱ったのでメモ

## やりたい事

– DBに間違ってinteger型で作ったカラムをfloat型に変更
– form_for内でnumber_fieldで小数点を扱えるようにする
– DBに保存した値を合計するメソッドを作る

## 参考

>
【Rails】form_for の number_field で小数を入力できるようにする
https://qiita.com/tegnike/items/07f789eb22c7a7bf6a19
>
マイグレーションを使ったカラムの追加、削除、データ型の変更 [ 自分用メモ ]
https://qiita.com/dawn_628/items/13fa64dc6d600e921ce3

>
【Rails】カラムの合計値を求める!
https://qiita.com/tomokichi_ruby/items/8758a91566957cfc5429

## number_fieldでは整数のみしか扱えない

“`erb:new.html.erb
<%= form_for @count_time do

元記事を表示

コントローラー名とアクション名でSCSSを呼び出す

例えば WelcomeController の index アクションが呼ばれた場合、デフォルトの状態だとビューには welcome.css(.scss) がロードされるのだけど、これを呼ぶかどうかについて、ファイルの有無とか controller での変数で判定できたらいいのになという話。

色々方法はあるかと思うのですが、以下のようにしてみました。

assets/stylesheets/application.css

*= require_self
*= require_directory .
デフォルトだと require_tree . となっている箇所を require_directory . にする。こうすることでルートディレクトリ( assets/stylsheets/* )の css しか自動でインポートしないようにする。

ついでにスタイルシートのディレクトリも以下のように views っぽくする。

f:id:ltcmdr927:20121209105229p:plain

HEAD タグは application.html.erb で編集しているので、そ

元記事を表示

Railsチュートリアルメモ – 第4章・第5章

[メモ目次はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

[Railsチュートリアル第4章はこちら](https://railstutorial.jp/chapters/rails_flavored_ruby?version=5.1#cha-rails_flavored_ruby)
[Railsチュートリアル第5章はこちら](https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#cha-filling_in_the_layout)

Railsチュートリアルで気づいたことのメモを記載していきます

## 4.1 動機
Rubyに関する知識を深めていく章。
手始めに条件分岐で異なる文字列を返すhelperを自作する。

## 4.2 文字列とメソッド

### ポイント
– 文字列の式展開 => Rubyはシングルクォート文字列の中では式展開を行わない(シェルスクリプトと同じ)
– putsメソッド(printメソッド +

元記事を表示

rails: belongs_to :user, optional: trueとは?

簡単に説明すると、belongs_toで“optional: true“を設定することにより外部キーのnilを許可できるようになります。

### “optional: true“はどんなときに使われるのか?
例えば、Q&Aのようなサービスを作る際にuserテーブルとquestionテーブルがあるとする。
その際に、ログインしていないユーザーからでも質問をポストできるシステムを作るときに使われたりする。
基本的にアソシエーションを書くときは外部キーが無いっていうことはあまりないがたまにある時もあるのでその際に“optional: true“をつけなかったりするとバグの温床になるので気をつける必要がある。

ただDBの設計上、外部キーのnilを許可することが少ない気がするので、あまり使う設定ではないかもしれません。

元記事を表示

pickadate.jsを使ってフォームにカレンダーを表示させる

こんにちは!スージーです!
久し振りにrailsでアプリ開発を開始したのでその際に使った`datepicker`についてまとめ

## datepickerとは

![スクリーンショット 2020-01-02 18.25.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428016/34bea1f8-09e7-6cb2-7678-c3cc9855deae.png)

日付入力フォームを選択した時に表れるカレンダー

## 参考記事

>
結局、どのdatepickerが一番使い勝手がよいのかhttps://qiita.com/knt45/items/6d74f6785cd4547ae53b

>
Rails Application Build Guides
https://rails.densan-labs.net/form/datetime_register_form.html

>
pickadate.js
https://amsul.ca/pickadate.js/

>
pickadate

元記事を表示

Stripe API / 例えば1ヶ月単位のサブスクリプションのキャンセルを予約した時に、サイクル請求の期間に対して中途半端な終了日を指定すると、次回のインヴォイスが日割計算されることが分かる。 ( #Ruby #Stripe )

# Points

prorate: true
prorate: false

どちらでも挙動は変わらないように思えた

# Code

“`rb
#! /usr/bin/env ruby

require ‘stripe’

# You Need
# `$ gem install activesupport` befure run ruby script
require ‘active_support/core_ext’

# Docs
# https://stripe.com/docs/api/subscriptions/create
# https://stripe.com/docs/billing/subscriptions/billing-cycle#prorations

Stripe::api_key = ENV[‘STRIPE_SECRET_KEY’]

def create_subscription_and_cancel(cancel_at_natural_cycle_end:, prorate:)
product1 = Stripe::Product.cre

元記事を表示

初学者によるプログラミングMemo #16 sliceメソッド([]メソッド)

# はじめに
今回はsliceメソッドを使用するお話です
破壊的メソッドにも触れます
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです

# 目次
– “slice”メソッドについて
– []について
– 破壊的メソッドについて
– 問題
– 破壊的メソッドを使わない様に書いてみる

## “slice”メソッドについて
[こちら](https://ref.xaio.jp/ruby/classes/string/slice)によると「sliceメソッドは、[]の別名です。引数にしたがって文字列の中から部分文字列を取り出します。」とあります
引数に整数一つを指定すると、その一文字を取り出す事ができます *Ruby1.9以降
少し使ってみます

“`.rb
array = “school”
p array.slice(0)
=> “s”
“`
0番目の一文字を取り出せました
元の変数には変化がありません

“`.rb
array = “school”
p array.slice(0)
p

元記事を表示

[Ruby] EnumerableとEnumeratorとEnumerator.produce

# はじめに

– `Enumerator.produce` は、[Ruby 2.7.0](https://www.ruby-lang.org/ja/news/2019/12/25/ruby-2-7-0-released/) で新たに追加されたメソッドです。
– 本記事では`Enumerator.produce`を紹介したいんですが、便宜上`Enumerator` とは、そもそも`Enumerable`とは一体まで遡ってまとめていますので、そんなことはいいから `produce`メソッドを教えろという方は下の方までスクロールお願いします。

# Enumerable

– [Enumerable](https://docs.ruby-lang.org/ja/latest/class/Enumerable.html)は**モジュール**
– 標準クラスだと `Array` とか `Hash` なんかがインクルードしている (他にもたくさん)
– インクルードする場合、`each` メソッドの実装が必須
– `each` メソッドを用いて、 `all?` `collect` `first`

元記事を表示

anyenv で rbenv を使っているときの最新版 Ruby のインストール

anyenv で rbenv を入れていて、通常の `brew upgrade rbenv ruby-build` をやっても最新版の Ruby が表示されなかったのでメモ。

anyenv を使っていると以下のコマンドで env 系を一括でアップデートできる。

“`console
anyenv update
“`

上記コマンド実行後、 `rbenv install -l` を実行すると最新版の Ruby が表示された。

元記事を表示

WSLでRails6の環境構築

VSCode上で環境構築します。
#WSLを有効にし、Ubuntuをインストール
[こちらの記事](https://qiita.com/Brutus/items/f26af71d3cc6f50d1640)通りに進めていけば簡単にできます。画像付きですごく分かりやすかったです。
UbuntuはLTS版を入れました。
#VSCodeの設定
VSCodeの拡張機能`Remote Development`をインストール。これでWSLに接続して開発ができるようになる。
インストールしたら、VSCodeの一番左下に緑のアイコンがでるのでクリック。
`Remote-WSL: New Window`を選択。これで設定終了。
#Ubuntuのパッケージを最新化
VScodeのターミナルを開いて、2つのコマンドを実行。かなり時間かかりました。
sudoコマンドを使うときに、Ubuntuで設定したパスワードを聞かれるかも。

“`:パッケージの最新化
$ sudo apt update
$ sudo apt upgrade -y
“`
#rbenvのインストール
rbenvは、複数のRubyのバージョン

元記事を表示

OTHERカテゴリの最新記事