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

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

Rails6.0ルーティングまとめ

#はじめに

Rails6.0のルーティングのパス名 resouces resourceなどを忘備録を兼ねてまとめます。

#明示的なルーティング指定

“`routes.rb
# ルートへアクセスするルーティング
root ‘users#show’
root to ‘users#show’
root ‘/’, to: ‘users#show’
“`

“`routes.rb
# ‘/users/:id’でusersコントローラのshowアクションにルーティング
get ‘/users/:id’, to: ‘users#show’
“`

“`routes.rb
# ‘hoge’でusersコントローラのshowにルーティング
# as:オプションを使うとルーティングに名前を指定可能
get ‘/users/:id’, to: ‘users#show’, as: ‘hoge’
“`

<%= form_with %><%= link_to %>などでurlを指定する際に、直接/posts/:idなどのurlのように指定可能ですが、変更の際に修正箇所が多くなり得策ではありま

元記事を表示

Ruby on RailsにてRails new〜デプロイまでの忘備録1

#Ruby on RailsにてRails new〜デプロイまでの忘備録です!
何回かに分けて、Rails newコマンドでアプリケーション作成からデプロイまでの一連をつらつらと書いていきます。
1回目は、Railsアプリケーション雛形作成からリモートリポジトリへpushまで書いていきます。

足りない点や間違っている点があったら、教えていただけると嬉しいです。

※Ruby,Rails,GitはPCにインストール済みを想定します。
GitHubもリポジトリの作成等の説明は省きます。

##環境
開発環境
言語:Ruby 2.5.1
FW:Ruby on Rails 5.2.4
DB:PostgreSQL
test:RSpec
バージョン管理:Git,GitHub

環境:MacBookAir
※VirtualBox,Docker等の仮想環境はRailsの基礎を重視するために導入しませんでした。
デプロイ先:heroku
AWSも環境と同じ理由で導入しませんでした。

##Railsアプリ作成

Rails newコマンドを使ってアプリケーションのディレクトリを作成しましょう!

元記事を表示

Safari で disable_with オプションを付けても変わらない場合

Railsでフォームを作る際、送信ボタンに disable_with オプションを付けることで、二重送信を防ぐことができる。

“`ruby
= f.button ‘送信する’, data: { disable_with: ‘送信中…’ }
“`

しかし、Safariに限って、なぜかボタンの文言が変化しなかった。GitHub上でも、多々報告されている。
[disable_with doesn’t work with link in Safari #306](https://github.com/rails/jquery-ujs/issues/306)

## 解決策

結論から書くと、JSで送信処理をあえて遅らせることで、とりいそぎは回避できた。
Issue内ではバニラJSで書かれた例が出てくるので、jQueryを使っていなけば、そちらを参考にした方が早いかもしれない。

“`ruby
= f.button ‘送信する’, data: { disable_with: ‘送信中…’ }, class: ‘disable_with_safari’
“`
“`js
$(‘.dis

元記事を表示

【Rails6.0】突然CSSが読み込まれなくなった、、【怪奇現象?】

現在個人開発でRailsアプリを作っているのですが、正常に動いていたRailsアプリのCSSが突然読み込まれなくなり(画像ファイルも)無駄に時間を食ってしまいました。
結局はっきりとした原因はわかりませんが、解決するまでの過程をここに書いていこうと思います。

**開発環境**

– windows10 Pro
– Rails: 6.0.3.2
– ruby: 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
– Docker for windows
– MySQL 5.7
– nginx:1.15.8

##エラーが発生した経緯
rspecのシステムスペックでテストを書いて実行、失敗を10回ほど繰り返してlocalhost(root_path)にアクセスしたら
CSSが反映されなくなっていた。
そのときのConsoleのエラー内容↓

“`
Failed to load resource: the server responded with a status of 500 (Internal Server Error

元記事を表示

RSpec – ‘users validation’のテストコードをレビューしてもらった結果

# はじめに
みなさん、こんにちわ!Qiitaの投稿、ruby、rails、rspec初心者の J です!
つい先日、「プロから見た僕のspecはどうなの?」というのが気になり、
[RSpec – ‘users validation’のテスト](https://qiita.com/denjneb/items/36f0f86271b5ebd1a4d1#comment-9fb76aed6af4ca75cea5) を質問として、投稿しました。
そして、rubyやrspecについての動画をyoutubeで配信されていて、
僕の先生である@jnchito さんにコードレビューをしてもらいました!
テストコードは、そこそこ長かったのですが、一つ一つ徹底的に指摘してもらえて、
「僕ならこう書く!」を丁寧に解説してくださいました!
おかげさまで、
>「ルールに従ったテストコードがなんなのか」と迷子になり、
なかなかcommitできず、地獄を彷徨っています。

から開放されて今は天にも上ような気分です!、、レビュー頂いて本当にありがとうございます。。泣

### @jnchito さんについて
有名なの

元記事を表示

RubyとGem

####Gem(ジェム)

Rubyを用いた開発において使用できるツール(ライブラリ)。
ただしGemは他のGemの機能を使って成り立っているものが多く、単体では使用できないことが多い。

####bundler

そこで出番はこの**「bundler」**
欲しいGemに関連する必要Gemをまとめてインストールしてくれます。超便利。
ちなみにbundlerもGemの一つだったりする。

####Gemfile.lock

bundlerでbundle installしたときに、自動生成される情報が記録されているファイル。1つのGemのためにどのGemをどのバーションで合わせてインストールしたか確認できる。

元記事を表示

クラスとモデル

##クラスとは
– rubyの概念
– 複数のデータと処理(メソッド)をまとめて入れた箱(オブジェクト指向)。設計図のようなもの。

##モデルとは
– railsの概念 ~~Ruby~~
– クラスには違いないが、必ずモデルに対応したテーブル(データベース)を持つ
– 例えばPostモデルにはpostsテーブル(テーブルには複数のデータが入るため名前は複数形になる) => 逆にモデル名は必ず単数形で命名すること。

元記事を表示

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第14章】

##前提
・Railsチュートリアルは第4版
・今回の学習は3周目(9章以降は2周目)
・著者はProgate一通りやったぐらいの初学者
##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

 
ラストじゃ!!!!!最後まで駆け抜けろ!!!!!

 
ラストを飾るBGMはこちら。
[My Bloody Valentine “Loveless”](https://www.youtube.com/watch?v=OrMjc4oz0mY)
始まりにして終わりみたいな一枚。もはやオチ担当。大音量で脳汁たらしながら聴きましょう。

 
####【14.1.1 データモデルの問題(および解決策) 演習】
1. 図 14.7のid=1のユーザーに対してuser.following.map(&:id)を実行すると、結果はどのようになるでしょうか? 想像してみてください。ヒント: 4.3.2で紹介したmap(&:method_name)のパターンを思い出して

元記事を表示

ワンタイムパスワードをサーバー側とクライアント側で作るサンプル

## ワンタイムパスワードのロジックを作ってみた

2020/09/25 現在では何かと銀行がクラックされまくっているが、いずれもワンタイムパスワードのような認証が入ってない。もちろんワンタイムパスワードも「そのワンタイムの間に」盗まれればアウトなんだけど、常時通信内容を奪うのは盗む方も大変だ。

ただ、ワンタイムパスワードの仕組みが、Google Authenticator などの外部の仕組みに依存するのは、別の意味でリスク(急に仕様が変わるなど)。

なので、自前でどこまでできるかを検証。

## どのようにして動く?

以下の要素を組み合わせて、ダイジェスト(sha256)を生成し、ダイジェストから数値6桁を取り出してます。

– ユーザ毎に違う秘密鍵(クライアントとサーバーで同じ秘密鍵を持ちます)
– タイムスタンプ(今回のサンプルでは60秒で割った整数部を使います)
– ソルト(サーバー側で保持する長い文字列)

## サンプルソース

### 端末側

“`onetime.js

async function digestMessage(message) {
cons

元記事を表示

RuboCopでこんなエラーが出た。Assignment Branch Condition size for search is too high.

## なにこのエラー
“`
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
“`
コミットをする前にこんなエラーが出た。
調べてみると、なげーよ、幅取りすぎだろみたいなエラーらしい。

## RuboCopとは。簡単に
>RuboCopのGithub
https://github.com/rubocop-hq/rubocop/tree/v0.28.0

このRubCopはコードを検査してくれるものらしくて、コードが長いとか、インデントが変だとかいろんなことを教えてくれる。勝手に直してくれる(不自然なインデントを修正)ときもあれば、警告文だけだして、自分でどうにかしてくれみたいな時もある。ただ、このRuboCopからの指摘も全てが正しい訳ではないっぽい。

## 今回のエラーに関して
“`
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
“`
最初に述べた

元記事を表示

gem Pagy(ページネーション)を配列に適用させる書き方

railsのAPIモードでアプリケーションを作る際、ページネーションでPagyというgemを使用しました。
その際、記述の仕方に迷ったのでメモとしてここに残しておきます。

## 配列に適用させる記述
“` ruby
pagy, offices = pagy_array([])
“`

## ふつうに適用させる方法
“` ruby
$ pagy, offices = pagy Office.where(city_id: params[:city_id])
“`

“` ruby
pagy, offices = pagy(Office.all)
“`

## HTTPヘッダーに関する記述
“` ruby
pagy_headers_merge(pagy)
“`
これを上の記述の下に追記すると、HTTPヘッダーにページネーションの情報を持たせることができる。

元記事を表示

【Rails】devise, devise_token_authで、ユーザー作成ログインの初期設定

#新規ユーザーモデルを作成する時

##deviseの設定

“`shell:
$ rails g devise:install
create config/initializers/devise.rb
create config/locales/devise.en.yml
“`

“`routes.rb
Rails.application.routes.draw do

devise_for :users, :controllers => {
:registrations => ‘users/registrations’,
:sessions => ‘users/sessions’
}

devise_scope :user do
get “sign_in”, :to => “users/sessions#new”
get “sign_out”, :to => “users/sessions#destroy”
end
end
“`

devise_for :モデル

元記事を表示

DBから特定のカラムの数値を取り出したい(自分メモ)

Aテーブル:user
Bテーブル:user_info

目的:
Bテーブルの特定カラム(ここではuser_main_id)の数値を返したい

やり方:
用意されているのは、Aテーブルの@user_sessionのみ。

1. Aテーブルの@user_sessionの中のidを探し出す。
2. Aテーブルのidと、Bテーブルのuser_idの数値を一致させる
3. Bテーブルの中でidで一致した後、目的のカラム(user_main_id)を取得する

“`ruby:Ruby
API表示名: user.find_by(user_id: @user_session.record.id).user_main_id
“`

@user_sessionの中身が何かが重要!

参考URL
https://qiita.com/tsuchinoko_run/items/f3926caaec461cfa1ca3

元記事を表示

【ruby】ストロングパラメーター【require】【permit】【merge】使用方法 役割

# はじめに
 この記事は、学んだことを復習するために投稿者が理解できる言葉まで落とし込んで書いております。
# 1.役割
 ストロングパラメーターとは、指定したキーを持つ、パラメーターのみ受け取るように制限をかけることができるものです。

# 2.使用する理由
 受け取るパラメーターのデータを制限することで、意図しないデータの保存。更新を避けるため。
今回は、商品出品を行うフリマアプリを想定した例で紹介します。

# 3.基本構成と使用方法

・基本構成は以下の通りです。

“`ruby
# ・・・中略
def new
@item = Item.new
end

def create
@item = Item.new(item_params)
end

private

def item_params
params.require(:item).permit(:name, :explanation, :category_id, :status_id, :delivery_fee_id, :shipping_region_id, :shipping

元記事を表示

Pay.JP ローカルではできたのに本番環境では上手く動作しない時の解決法

1週間ほど悩んで解決した
Pay.PJがローカル環境ではしっかり動作するのに本番環境では決済ができない原因を忘れないうちに書いておきます。
Pay.JPの決済がうまくできない原因はエラー文が出ないのでかなり時間がかかりました…

動作環境
ruby 2.6.5
Rails 6.0.3.2
heroku 7.42.13

#エラーの原因
エラーが起こっていた原因は簡単にまとめると
**Herokuに設定した環境変数が本番環境に反映されていなかった**
ことが原因です

どういうことか説明していきます。
ターミナルにて
“`heroku config:set PAYJP_PUBLIC_KEY=’ご自身のテスト公開鍵’“`

“`heroku config:set PAYJP_SECRET_KEY=’ご自身のテスト秘密鍵’“`
を入力されるかと思います。
しっかり入力できているかどうかは
“`heroku config“`
で確認していただければ確認できます。
**確認するとしっかり入っているんです。**
**入っているんです!!**
これに騙されました…
Herokuの環境変

元記事を表示

Rubyを用いたじゃんけんプログラムとそのテスト(test-unit)

# はじめに
Rubyでじゃんけんのプログラムを製作しました。
その際、勝ち負けの判定が正しいかをtest-unitを用いて確認しました。

# 目次
1.じゃんけんメソッドを書く
2.テストコードを書く
3.じゃんけんプログラムを書く
4.プログラムを実行
5.テストを実行

# 1.じゃんけんメソッドを書く
初めにじゃんけんのメソッドをクラスにまとめます。
ここでは、標準入出力などは行わずただ戻り値を返すだけです。
このメソッドは部品としてテストコードとじゃんけんプログラムのコードに使用します。

“`ruby:janken_judge.rb
class Janken
def self.judge(my_hand, enemy_hand)
hands = {“g” => “グー”, “c” => “チョキ”, “p” => “パー”}
if my_hand == enemy_hand
“あなたは#{hands[my_hand]}、私は#{hands[enemy_hand]}、引き分けです。”
elsif (m

元記事を表示

form_withによるname属性とid属性の自動付与

動作環境
Ruby 2.6.5
Rails 6.0.3.2

form_withを使った場合、name属性とid属性が自動で付与されていたことに気づかずにエラーをよく起こしていたので、投稿してみました。

##form_withにmodelを指定し、name属性とid属性が自動で付与される具体例
“`ruby:new.html.erb
<%= form_with model: @hoge, local: true do |f| %>
<%= f.text_field :fuga %>
<%= f.submit "投稿する" %>
<% end %>
“`
上記のように、modelを@hogeに指定し、検証ツールにてname属性とid属性を確認すると、**name=”hoge[fuga]”、id=”hoge_fuga”**となります。nameとidを指定していないのに、自動でname属性とid属性が付与されています。

先ほどのコードでは、name属性とid属性を指定しない場合は自動で付与されるという話でしたが、name属性とid属性を指定した場合はどうなるのかを見ていきまし

元記事を表示

【初学者向け】Rubyにおける○○.△△(ActiveRecordメソッド、インスタンスメソッド、データ取得)

#この記事を書いた背景
Rubyを学習している中で、○○.△△のパターンのコード(例: User.new)をたくさん見ました。
それぞれ使われ方が違うのではないかと思って調べたら、3つの使われ方のパターンが有りました。
ということで、今回は○○.△△のパターンをまとめました。

#対象読者
Rubyを学習中の駆け出しエンジニアさん

#実施環境
Ruby 2.6.5
Rails 6.0.3.3

#3つのパターンがありました
##①モデル(クラス)名.ActiveRecordメソッド名
モデルに対するテーブル操作で用いられます。
下の例では、『Tweet.all』、『Tweet.new』、『Tweet.find(params[:id])』の部分です。

~~~ruby
class TweetsController < ApplicationController def index #Tweetモデル(Tweetsテーブル)の全データ取得 @tweet = Tweet.all end def new #Tweetモデルのインスタンス生成 @

元記事を表示

[Rails]simple_calendarの導入方法

#はじめに
アプリ開発でカレンダーを用いた実装をしたかったので簡単にまとめました。

###simple_calendarとは
simple_calendarとは、簡単にカレンダー機能を付け加えれるgemです。
月間カレンダー、週間カレンダーなど日付指定をしてカレンダーを作成することができます。
今回は月間カレンダーを用いた方法となっております。

#目次
1. simple_calendarのインストール
2. simple_calendarのビューの生成
3. カレンダーを表示
4. カレンダーのレイアウトの変更
5. おまけ

#1. simple_calendarのインストール
gemファイルに以下を追記し、アプリケーションのディレクトリで「bundle install」を実行します。

“` gem.file
gem “simple_calendar”, “~> 2.0”
“`
#2. simple_calendarのビューの生成
simple_calendarのビューファイルを生成するために、以下のコマンドを実行します。
レイアウトをカスタマイズしたいときはこのコマンド

元記事を表示

【Rails6】Devise+SNS認証で登録&ログイン(複数連携可)

###はじめに
複数のSNSと連携可能な認証をつくります。
Deviseは実装済みとして進めます。
各APIキーの取得等にも触れませんので適宜お調べ下さい。
今回はfacebookとtwitterで実装しますが他のSNSでも基本的には同じだと思います。

###環境

“`console:環境
Windows10
ruby 2.6.6
Rails 6.0.3.1
“`

###下準備

#####gem追加

“`rb:Gemfile
gem ‘omniauth’
gem ‘omniauth-facebook’
gem ‘omniauth-twitter’
“`
保存後bundle installして下さい。

#####credentials.ymlにAPIキーを記述

Windowsの方は[前回の記事](https://qiita.com/ChangGin/items/369ade18ed49f932cb42)を参考にしてみてください。

“`yml:credentials.yml

facebook:
api_key: pk_test_~
secret_key:

元記事を表示

OTHERカテゴリの最新記事