Ruby関連のことを調べてみた2019年12月27日

Ruby関連のことを調べてみた2019年12月27日
目次

Rails routes Couldn’t find Model名 with ‘id’=xxx

# 思い通りにルーティングできない

`Couldn’t find Model名 with ‘id’=xxx`的なエラーが出る。

**routes.rbに書く順番を変えるだけだった。**

“`rb:routes.rb
Rails.application.routes.draw do
get ‘hoge/index’
# 先にこちらが評価され、{id=fuga}でshowに送られる
get ‘hoge/:id’, to: ‘hoge#show’, as: ‘hoge_fuga’
# 以下には到達しない
get ‘hoge/fuga/:id’, to: ‘hoge#fuga’, as: ‘hoge’
“`
“`erb:index.html.erb
<%= link_to '届いてくれー', hoge_fuga_path(@fuga.id) %>
“`
“`rb:hoge_controller.rb
class HogeController < ApplicationController def show @hoge =Hoge.find(pa

元記事を表示

content_tag

`content_tag`はのちに消える説あるけどコードが冗長だったので修正しました。

##修正前
“`html
<% if @provider.key == "noe-jx-group" %>

割引額<%= service['discount'].to_f %>円<% if SetPlan.is_discount_from_energy?(service) %>/kWh<% elsif SetPlan.monthly?(service) %>/月<% elsif SetPlan.yearly?(service) %>/年<% end %>

<% end %>
“`

##修正後

“`html

<%= discount_text(service, @provider) %>
“`

“`try_helper.rb
def discount_text(service, pr

元記事を表示

#Stripe API + #Ruby / 定期支払いのスケジュール登録をする / 請求回数を1回だけに設定し、サブスクリプションが作成されたらすぐにキャンセルする

# If you set billing cycle anchor to subscription over natural cycle of subscription then see below error

“`
Stripe::InvalidRequestError: billing_cycle_anchor cannot be later than next natural billing date () for plan
“`

# Let’s use Subscription schedule

billing cycle anchor is not for schedule
Subscription schedule is for schedule Subscription!

# For example

you can specify 100 days after as subscription start over subscription cycle.
you can specify only one cycle subscrip

元記事を表示

#Stripe API で定期支払いのスケジュールを登録して、すぐに請求し、支払い成功させる ( with #Ruby )

# Code

“`rb
# Docs

# https://stripe.com/docs/api/subscription_schedules/create
#
# Invoicing workflow | Stripe Billing
# https://stripe.com/docs/billing/invoices/workflow
#
# https://stripe.com/docs/api/invoices/

# Code

require ‘stripe’

Stripe::api_key = ENV[‘STRIPE_SECRET_KEY’]

product = Stripe::Product.create(name: “Gold plan #{rand(9999999999)}”)
plan = Stripe::Plan.create(interval: ‘month’, currency: ‘jpy’, amount: 1000, product: product.id)
tax_rate = Stripe::TaxRate.create(display_n

元記事を表示

Rails6 の Zeitwerk と XXXHelper の DEPRECATION WARNINGと OmniAuth

あるプロジェクトを Rails 6 にアップグレードしたら、DEPRECATION WARNING が出るようになりました。

“`
DEPRECATION WARNING: Initialization autoloaded the constants ApplicationHelper, AaaHelper, BbbHelper, …, ActionText::ContentHelper, and ActionText::TagHelper.
“`

# ApplicationHelper で grep する

なるほど〜。これは、[例の Zeitwerk のワーニングだな](https://qiita.com/jnchito/items/b8f40e7fe82b07bc3de8)とピンと来た私は、
`config/initializers` 内のファイルとかで `ApplicationHelper` を参照しているのかと思い、`ApplicationHelper` で grep してみたのでした。

すんなり解決できるかと探してみましたが、 `app/helpers/a

元記事を表示

【Rails】rails sのログに「Cannot render console from !」と出たときの対処法

## はじめに
以下エラーが**Docker環境**のRailsアプリ開発中に発生しました。
対処法について記載します。

画面は`rails s`のログから切り取ったものです。

“`shell
Cannot render console from 172.23.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
“`

## 環境
“`yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
Docker: 19.03.5
docker-compose: 1.24.1
“`

## 結論:対処法
`config/environment/development.rb`に以下**ホワイトリスト**を追記します。

“`
Rails.application.configure do
…略
config.web_console.whitelisted_ips = ‘172.23.0.1’ #追記
…略
end
“`

これで**無事に動く**ようになり

元記事を表示

マイグレーションファイルのdef upとdef self.upの違いについて調べてみた②

## はじめに
[前回の記事](https://qiita.com/knog/items/288ad6d53a9a145924a8)で`nearest_delagate`がなんなのか分からず、中途半端に終わってしまいました。
今回はその続きです。migrateタスクが定義されているところから追いかけてみようと思います。

ちなみに前回と同じくマイグレーションファイルが下記のようなものだとして話を進めます。

“`
class CreateUsers < ActiveRecord::Migration[5.2] def up create_table :users do |t| t.string :name t.timestamps end end end ``` ## 環境 ruby 2.6.3 rails 5.2.3 ## active_record/railties/databases.rake ``` db_namespace = namespace :db do desc "Migrate the databas

元記事を表示

【Rails】既存テーブルのカラム型を変える

# はじめに
railsでのWEBアプリ開発中に、カラム型をデータベース新規作成時に設定ミスがありました。
後からカラム型を変更しようと思ったとき、変更方法がふわふわしたので自分のためにまとめます。

# 既存テーブルのカラム型を変更する
##変更対象のカラム
今回、カラム型を変更したいのは以下のカラムです。date型を**datetime**型に変更します。

テーブル名|カラム名|型|
|:——-:|:——-:|:——-:|
|hindexts|deadline|date → **datetime**|

## 空のマイグレーションファイルを作成する
### rails g migration

 マイグレーションファイルを作成するには、**「rails g migration ファイル名」**を使用します。
 実行すると、指定したファイル名のマイグレーションファイルが作成されます。ファイル名は自由に指定できますが、**どのテーブルのカラム型を変更するのか**等の情報が分かりやすい名前が望ましいです。
 また、作成されるマイグレーションファイル名には先頭

元記事を表示

お名前.com / DNS に無料でフロントのラウンドロビンのロードバランサーをさせてみた – – – AWS S3 と Azure Blob Storage に静的WebをActive-Activeさせた話

#Webホスティングのサイズが大きくなくトラフィックが軽微ならほぼ無料でWebサイトのホスティングと手前のロードバランスも
AWSやAzureでロードバランスの機能があってWebサーバーの行き先を変えるという行為はAWSでもAzureでも認定試験の試験範囲であったりするのだがどちらのロードバランサーも金がかかる。クラウド技術を新たに習得する人はこれがデファクトスタンダードだと思う。私にも意外な盲点ではあったのだが金かけたくないなあと思って調べていたところラウンドロビンのロードバランスであればドメイン名解決でやってしまうのも手かなあと思ってテストしたら上手くいった。調べてみたところ意外にオーソドックスではあるものの広く知られていない手法のようだ。静的なWebページをAWS S3とAzure Storageに放り込んだが**私が管理しているWebホスティングがほとんど無料になったのとしかもロードバランスまで無料でできるようになった。**片方が死んでももう片方にラウンドロビンされるので今年の夏にあったAWS死亡の際はタイミングによって自動でAzureにいくし、その逆も可能になった。「負荷分

元記事を表示

SQLite3::BusyException: database is locked: エラー

####環境:

“`
Rails 5.1.7
“`

####エラー内容:
SQLiteのカラムを少し変更してから、DBにフォームを送るとサーバー上で下記のようなエラー検出

“`
ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked: INSERT INTO “budgets” (“budget_type”, “price”, “memo”, “created_at”, “updated_at”) VALUES (?, ?, ?, ?, ?)):
“`
####エラー原因:
DB Browser for SQLite(SQLite管理ソフト)内でのデータ更新のし忘れ

####試したこと:

① ターミナルで rails c して

“`
ActiveRecord::Base.connection.execute(“BEGIN TRANSACTION; END;”)
“`
を打つ => 失敗

② config/database.yml内の、timeoutの値を5000から

元記事を表示

初学者によるプログラミング講座 #3 Ruby 文字列変換メソッド

# はじめに
今回は備忘録的な感じで、文字列の変換メソッドを紹介します
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです

# 目次
– そもそもメソッドとは
– 文字列をくっつけたい
– 文字列を区切りたい
– 順番を逆にしたい
– 頭文字だけ大文字にしたい
– 全部大文字にしたい

# そもそもメソッドとは
プログラミングにおける、何らかの処理をする命令群のこと
メソッド名を用いることで、欲しい値を求めたり、実行したい処理を命令することができる
例えば、putsメソッドと言うのがあり

“`
puts “Hello World”
“`
と記述することで、

“`
Hello World
“`
と表示させることができます
これは、ターミナルに文字を出力するメソッドのこと
putsというメソッドに半角スペースを空け、右に続けて文字列などのオブジェクトを記述すると、そのオブジェクトが文字としてターミナル上に出力される
このように、元々から命令が設定されているもののことをさします

元記事を表示

Javaエンジニアが今さらRubyの基礎文法を覚えるために対比した その2(クラス、メソッド編)

# はじめに
2回目はクラスとかメソッドです。

# 環境
[paiza.io](https://paiza.io/)でこういう時は実行すると楽です

これを作った時のバージョンは以下です。バージョンは[ヘルプ](https://paiza.io/help?locale=ja-jp)から確認できます。

Ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Java openjdk version “12” 2019-03-19

# スコープの話
JavaもRubyもpublic,protected,privateが存在していますが、概念が違うので、項を分けました。

publicは同じで制限無しなのですが、protectedとprivateは違います。

詳しくは[こちら](https://qiita.com/tbpgr/items/6f1c0c7b77218f74c63e)を参考にさせていただきつつJavaエンジニア的な解釈で書いています。

なお、package privateの概念はRubyにはないようです。

##

元記事を表示

【Rails DB】既存のテーブルにカラムを追加する方法

#はじめに
 railsでのWEBアプリ開発中に、必要なカラムをデータベース新規作成時に加え忘れてしまいました。
 後からカラムを追加しようと思ったとき、追加方法がややこしかったので自分への備忘録と同じようなrails初学者の助けになればと思います。

#既存テーブルに新しいカラムを追加する
##追加する前のテーブル

|テーブル名|カラム:型|カラム:型|カラム:型|
|:——-:|:——–:|:——:|:——-:|
|hindexts|symbol:string|no:intgar|title:string|

##追加したいカラム
|カラム名|型|
|:——-:|:——-:|
|deadline|date|

### 備考 型について
型の名前 | 意味 | 用途
— | — | —
integer | 数字 | 何かの番号
text | 255文字以上の文字列 | 文章
string | 254文字以下の文字列 | タイトル,一文
boolean | True or False (真偽) | フラグ
date | 日

元記事を表示

deviseをi18nを使って日本語化する

#環境
Ruby 2.5.1
Rails 6.0.2

# devise.ja.ymlの導入

[こちら](https://qiita.com/you8/items/921e0dd1210eb0d158df)を参考にさせてもらってdeviseを日本語化した際に、いくつか違ったので、メモ書きしておく

## gemを導入

“`
gem ‘devise-i18n’
“`

上記のgemを導入した後に、

“`
$rails g devise:views:locale ja
“`
これを実行。

>Running via Spring preloader in process 70886
Deprecation warning: Expected string default value for ‘–controller’; got false (boolean).
This will be rejected in the future unless you explicitly pass the options `check_default_type: false` or ca

元記事を表示

初学者によるプログラミング講座 #1 Ruby/Railsとは

# はじめに
今回はRubyとRailsの特徴を簡単にまとめました
これから勉強される方の助けになればと思います
まだまだひよっこですので、間違っている点等ありましたらご指摘いただければ幸いです

# Rubyとは
スクリプト言語と呼ばれるプログラミング言語
プログラミング言語には、「コンパイラ言語」と「スクリプト言語」と言われる部類の言語がある
また、オブジェクト指向言語でもあるため、記述量が少なくすんだり、コンパイルの時間がかからない
だから生産性が高いと言われている

## 「コンパイラ言語」と「スクリプト言語」って?
– コンパイラ言語
コード実行に事前に全てを翻訳してから実行する
主に C,C++,Java,C#等

– スクリプト言語
各コード実行時に、随時翻訳しつつ実行する
主に Ruby,JavaScript,Python,PHP等

上記のような違いがありますが、そもそも、人間が書いたコード(わかりやすく言うと人間語)はそのままでは機械には伝わらない
機械が実行するには(機械語に)翻訳する必要がある
コンパイラ言語はコンパイラーを使用してコンパイル(翻訳)する必要があ

元記事を表示

php 連続 文字 一つに

# やりたいこと

ABBCCCAAのような文字列をABCAにしたい

# これでおk

PHP

“`php
>>> preg_replace(‘/(.)\1+/’, ‘\1’, ‘ABBCCCAA’)
=> “ABCA”
“`

JS

“`javascript
‘ABBCCCAA’.replace(/(.)\1+/g, ‘$1’)
=> “ABCA”
“`

ruby

“`ruby
“ABBCCCAA”.gsub(/(.)\1+/, ‘\1′)
=> “ABCA”
“`

python

“`python
import re
print(re.sub(r'(.)\1+’, ‘\\1’, ‘ABBCCCAA’))

=> “ABCA”
“`

おわり

類似記事

https://qiita.com/nena3/items/b5fec48c8eecb2353ab1

元記事を表示

Ruby silverに10日で受かった

##Ruby技術者認定試験Silverに合格した(2019/12/26)

今回、実施した勉強法や期間等をまとめたいと思います。

誰かの参考にでもなればいいなと思いつつ。

###前提
まだまだ駆け出しでRubyは業務で4ヶ月程触ったレベル。
最近はどちらかというと上流の方にいて、コード読むことはあっても、あまりコードを書いてない。
ので、コードをもっと読めるようになりたいと思いチャレンジ。

##学習期間
学習期間 : 10日
学習時間 : 30時間

上記は試験に特化した学習時間です。
よくよく、考えると短期集中過ぎますね。朝夜、昼休み、移動の電車で学習

##学習方法
とりあえず、Rubyの技術書を最低1冊は読んでおかないと問題の内容もキツイと思います。
####公式模擬問題集
無料です。解説もついてる。ブラウザ2画面に分けて問題と回答を交互に見れるようにすると便利。
[https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0](https://gist.github.com/sean2121/94

元記事を表示

【Rails5.0】PendingMigrationErrorと戦って負けた話

#この記事について
 技術的にPendingMigrationErrorを解決しました!という記事ではなく、**結果的にどう乗り切ったか**を記した備忘録です。
 rails初学者がこの記事をのぞき見してモチベーションを下げなかったら嬉しいなぁです。

#PendingMigrationErrorってなんぞね
こんな感じの画面です。
![Action Controller_ Exception caught – Google Chrome 2019_12_26 17_36_36 (2)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541458/79d82b6f-d88b-b826-4555-f58af15899b5.jpeg)

ふふふーんとサイトを更新しようとしてF5キーを押したらでできて驚きでした。
内容的には、

“`console:cmd
ActiveRecord::PendingMigrationError (
Migrations are pending. To resolve t

元記事を表示

Rubyの例外処理についてまとめ

Ruby技術者認定試験(シルバー)の試験を受けるまえに例外処理についてまとめました。

出題としては数問ですが、理解すればこのあたりは比較的取りやすいと思います。
ただあまり使用したことがないので、わたしは最初はとっつきずらかったです。

まず処理の部分を学ぶ前にどんな例外があるのか整理します。

##例外の種類
>
– Syntax Error :文法エラーがあったとき。たとえばシングルコーテションが抜けてるとか
– SignalException : 捕捉してないシグナルをうけた場合
– ArgumentError : 引数の数が合わない場合や値が正しくない場合。

“`ruby

def arg(a,b)
p a
p b
end
arg(‘hello’,’world’) #引数が正しい
“hello”
“world”
arg(‘hello’) #引数が足りない
ArgumentError: wrong number of arguments (given 1, expected 2)
“`
>
– RuntimeError : 特定の例外クラスに

元記事を表示

#Stripe API で定期支払い=サブスクリプションのトライアル期間のテストをする ( #Ruby )

# NOTE

– 公式にも、すぐ終わるトライアル期間を設定してのテストが勧められている
– trial_end を数秒後に設定してサブスクリプションを作成する
– 0円の請求がすぐに発生して、請求成功扱いになるようだ
– すぐにサブスクリプションの課金サイクルが始まるが、その前に一旦スケジュール登録状態になるみたいだ
– trial_end と billing_cycle_anchor は全く同じ時刻になるようだ

# Code

“`rb
require ‘stripe’

Stripe.api_key = ‘sk_test_xxxxxxxxxxx’

product = Stripe::Product.create(name: ‘Gold plan’)
plan = Stripe::Plan.create(interval: ‘month’, currency: ‘jpy’, amount: 1000, product: product.id)
tax_rate = Stripe::TaxRate.create(display_name: ‘Tax Rate’, percent

元記事を表示

OTHERカテゴリの最新記事