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

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

【Rails】RspecでCapybaraを使用した際に「undefined method `visit’」というエラーが出た場合の解決方法

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・rspec-rails: 4.0.1
・Capybara: 3.32.2
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[Font Awesome導入](https://qiita.com/matsubishi5/items/a4c72f436e64ad106ee8)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)

#

元記事を表示

booleanのvalidateについて

booleanのカラムについて、バリデーションをかけたがvalid?がtrueにならず、期待していた実行とは違うものになってしまった!

そこで、booleanのカラムについて調べたことを備忘録としてまとめておく!

ダメなパターン:Notnull制約でfalseが入っているので、presence: trueをすれば良いと思い下記のようにした!

“`ruby:
validates :check, presence: true
“`

しかし、これだとcheck=falseの時にエラーが出てしまう!

調べてみると、下記のようにする必要があることがわかった!

“`ruby:
validates :check, inclusion: {in: [true, false]}
“`

参考資料
https://qiita.com/mktakuya/items/a13c2175f0f0d9871038

元記事を表示

Ruby on Rails seeds.rbファイルを使って、コマンド1つでレコードを大量作成

# seeds.rbとは?
app/db ディレクトリにあるファイルで、レコードの作成に使うファイル。

レコードを作成する際に手作業で1つ1つデータを登録しなくても、
seeds.rbを使用すると大量のレコードをコマンド1つで作成することができる。
# seeds.rbを使用したレコード作成方法
1. seeds.rb ファイルにレコード作成の処理を記述
2. rails db:seed を実行
3. seeds.rb ファイルの処理が実行される

## 例:usersテーブルに100人分の名前とメールアドレスを登録
app/db/seeds.rb に以下のように記述し、

“`ruby:seeds.rb
100.times do |n|
User.create(name: “name#{n}”, email: “mail#{n}@gmail.com”)
end
“`

**rails db:seed** を実行すると、
users テーブルには name, email の値がそれぞれ

“name0, mail0@gmail.com”,
“name1, mail1@gm

元記事を表示

Ruby + SinatraでLINE Botを作ろう 〜 オウム返し編 〜

こんにちは。
この記事では、複数回に渡ってRubyとSinatraを使って

– 本の裏にあるISBNコードを送信すると検索して本の画像を表示してくれる
– その本を記録しておいて、あとから参照できる

という機能を搭載した「ほんめも!」というLINE Botを作ってみたいと思います。

## 0. この記事で作るもの
この記事では、オウム返しするLINE Botを作っていきます。
プログラムの流れは下記の通りです。
![スクリーンショット 2020-07-12 3.23.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672451/263d98da-a8f5-85b5-9da2-5c2e30c6b6ba.png)

## 1. プロジェクトを準備する

まずはプロジェクトの雛形を作りましょう。既に雛形がある場合や、既存のコードに組み込む場合は次の章に進んでください。

“`bash:ターミナル
$ bundle init
“`

`bundle init`コマンドでGemfileを生成します

元記事を表示

all_month が気になって ActiveSupport DateAndTime::Calculations を読んでみた

# これ何
先輩にレビュー中に、 all_month 使った方がいいんじゃない?と言われたので、気になって調べてみた。
ActiveSupport の [DateAndTime::Calculations](https://api.rubyonrails.org/v5.1/classes/DateAndTime/Calculations.html) に定義されていたので、周りのmethodも読んでみる

# 範囲指定のmethod
all_monthの内部実装を眺めてみた。rails/railsの内部実装だが、読めるコードでわかる。

“`ruby
def all_month
beginning_of_month..end_of_month
end
“`
ref: [activesupport/lib/active_support/core_ext/date_and_time/calculations.rb](https://github.com/rails/rails/blob/fc72d6815ad6ed447f1aea2dd98579305ea1cca4/activesu

元記事を表示

TECH CAMP学習 個人アプリ作成③

# ユーザー情報編集機能の追加
まずはターミナルにて以下のコードを入力します。

“`terminal.
$ rails g controller users
“`

続いてルーティングで下記を入力します。

“`routes.rb
devise_for :users
root “photos#index”
resources :users, only: [:edit, :update]
“`
resourcesの意味は日本語では資源をいう意味で、usersの中で編集と更新の機能を利用するという解釈でよいと思います。

続いてコントローラーを編集します。

“`users_controller.rb
def edit
end

def update
if current_user.update(user_params)
redirect_to root_path
else
render :edit
end
end

private

def user_params
params.require(:user).permi

元記事を表示

Rails5でECサイトを作る⑦ ~Address、Genreモデル編~

# はじめに
架空のベーカリーで買い物できるECサイトを作るシリーズ、[Rails5でECサイトを作る⑥](https://qiita.com/GreenFingers_tk/items/876bd51eb79acaa2bc5a)の続きです。
今回はアプリ本体の実装に戻り、購入したパンの送り先住所を管理するAddressモデルと、商品をまとめるGenreモデルの周辺を作っていきます。

# ソースコード
[https://github.com/Sn16799/bakeryFUMIZUKI](https://github.com/Sn16799/bakeryFUMIZUKI)

# Modelのアソシエーション
![association.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647951/438eabf6-8470-61bf-4901-cc89eb67b248.jpeg)

# Address
### controller

“`ruby:app/controllers/addresses_c

元記事を表示

Ruby on Rails アプリケーション新規作成コマンド

# アプリケーション新規作成
アプリケーションを作成するコマンドは
**rails new アプリケーション名**

例:
“`rails new myapp“`
# オプション指定
アプリケーション新規作成時にオプションを指定することができる。
## Rails バージョン指定
バージョンを指定してアプリケーションを作成する場合は
**rails _バージョン_ new アプリケーション名**

例:
“`rails _5.2.3_ new myapp“`
## データベース指定
データベースを指定してアプリケーションを作成する場合は
**rails new アプリケーション名 -d データベースの種類**

例:
“`rails new myapp -d mysql“`

データベースの指定がない場合、データベースはデフォルトのsqliteとなる。
## テストを作成しない
テストを作成せずにアプリケーションを作成する場合は
**rails new アプリケーション名 -T**
## .gitignoreファイルを作成しない
.gitignoreファイルを作成せずにアプ

元記事を表示

【AWS SDK】EC2自動構築用スクリプト

##目標
AWS SDK(AWS SDK for Ruby)を利用してEC2自動構築を行う。

##はじめに
AWS SDKの基礎知識をまとめた後、実際の動作をAWS SDK for Rubyを利用したEC2自動構築で試してみます。

##AWS SDK
AWSが提供しているAPIの一種で、AWSがサポートする様々なプログラミング言語にライブラリとしてインポートして利用します。
現在以下の言語がサポートされており、各種プログラムからのAWSリソース操作を可能にします。

・C++
・Go
・Java
・JavaScript
・.NET
・Node.js
・PHP
・Python
・**Ruby(本記事ではこれを利用)**

##AWS CLI、SDK利用時の認証
AWS CLI(OSコマンドライン上やシェルスクリプト、PowerShell上で利用)、AWS SDK(各種プログラミング言語上で利用)を利用する際には認証情報が必要となります。
認証情報の設定方法には以下3つの方法が存在しており、参照優先度が異なります。

| 項番| 優先度 | 認証情報の設定箇所 |
|:—-:|:-

元記事を表示

[Rails] link_toのリンク先を別タブで表示させたい

Railsでlink_toを使うときに別タブで表示させたいと思い、実装したのでメモとして残しておきます。

# 手順

まず `link_to` で表示させたい文字列とリンク先URLを指定。

“`rhtml
<%= link_to "文字列", "リンク先URL" %>
“`

別タブで表示させるため、`target: :_blank` を追加

“`rhtml
<%= link_to "文字列", "リンク先URL", target: :_blank %>
“`

これで別タブで開けるようになる。
しかし、これだとパフォーマンスとセキュリティの面で問題が。。。

– [グーグルのエンジニアが警告、「別タブで開く」リンクは実はヤバいんだって!?【SEO情報まとめ】](https://webtan.impress.co.jp/e/2020/03/13/35510)
– [実はヤバい?危険な「別タブで開く(target=”_blank”)」](https://wwg.co.jp/blog/3807)

この問題を回避するためには `rel=”noopener noreferr

元記事を表示

新規登録時、ActionMailerでメール送信機能

#概要
ActionMailerを使って新規登録時にwelcomeメールを送ります。

#前提
deviseを用いての、ログイン機能の実装。

#導入手順

###1. ActionMailerを利用する設定
welcomeメールの送信元はGmailを使う記載方法。
`config/environments/development.rb`にてActionMailerの設定方法の記述。

“`ruby:development.rb
Rails.application.configure do

#—中略—#

 config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
port: 587,
address: ‘smtp.gmail.com’,
domain:

元記事を表示

Digdag公式ドキュメントからDigdagを学ぶ-アーWorkflow definition

## 目標
Digdagの公式サイトのドキュメントのWorkflow definitionの翻訳+α
http://docs.digdag.io/workflow_definition.html

##目次
[Getting started](https://qiita.com/amagasu/items/92ad70c33f73ab613d08)
[Architecture](https://qiita.com/amagasu/items/572075dcc8b3c8640072)
[Concepts](https://qiita.com/amagasu/items/c850db3b564a7d6dc99c)
[Workflow definition](https://qiita.com/amagasu/items/2a8b84ac8fb4da2d9968)
Scheduling workflow
Operators
Command reference
Language API -Ruby
REST API
Internal architecture
Release Notes

#

元記事を表示

enumを日本語化して、連動したラジオボタンを生成する方法

# やりたいこと

以下のようなenumをラジオボタンで表現したい。

“`
enum loadtype: { normal: 0, trail: 1, beach: 2, track: 3 }
“`
かつ、選択肢は日本語で出るようにしたい。

# enumの日本語化について

こちらの記事の内容に従って日本語化します。
https://qiita.com/tanutanu/items/d44a92425188a4489ec6

# 日本語化したenumに連動したラジオボタンを記述

ViewのFormで以下のように記載

“`
<%= f.collection_radio_buttons :loadtype, Post.loadtypes_i18n, :first, :last %>
“`

コードの意味は以下の通り

“`
<%= f.collection_radio_buttons [column名], [表示対象のコレクション], [value], [textに表示する文字列] %>
“`

元記事を表示

[Rails]DBにデータが登録されない場合の対処法

## はじめに
フォーム入力内容をDBに保存したいがハマったのでアウトプット

## 環境

Rails 5.0.7.2
ruby 2.5.1
mysql 14.14

## 問題点
フォーム入力内容を保存しようとすると、パラメータに保存されているがDBに保存されない。

## 対処方法
保存するメソッドの後ろに!をつけて原因を確認。

すると、**validation failed:User must exist**(エラー内容は異なる場合がありそう)

## 原因
アソシエーションが組まれている際に、該当の外部キーが入っておらず、バリデーションで弾かれているのが原因。

**optional: true**を記述。

“`goal.rb
class Goal < ApplicationRecord validates :name, presence: true, uniqueness: true validates :time, presence: true, uniqueness: true validates :days, presence: true, uni

元記事を表示

Rubyの継承について

#プログラミングの勉強日記
2020年7月11日 Progate Lv.175
RubyⅤ

#継承
 クラスを1から作ることもできるが、すでにあるクラスを利用してそのクラスを元に新しいクラスを作れる。そうすることで共通部分をまとめることができ、効率的にコードが書ける。
 あるクラスをもとにして新たなクラスを作ることを継承という。`class 新しいクラス名 < 元となるクラス名`で他のクラスを継承して新しいクラスを定義することができる。新しいクラスは「子クラス」、元となるクラスは「親クラス」という。  親クラスのインスタンスメソッドが引き継がれる。 ```ruby:food.rb require "./menu" class Food < Menu end ``` 子クラスのインスタンスは、継承すると子クラスは親クラスのインスタンスメソッドを引き継ぐ。 ```ruby:index.rb food1=Food.new puts food1.name puts food2.info ``` ```ruby:menu.rb class Menu attr_accessor :n

元記事を表示

Rubyのクラスとインスタンスについて

# プログラミングの勉強日記
2020年7月11日 Progate Lv.175
RubyⅣ

#クラスとインスタンス
 ここでは簡単にクラスとインスタンスについて説明する。プログラミングでメニューという「もの」を作るためには、まずその設計図が必要でとなる。設計図をクラス、「もの」をインスタンスという。(設計図(クラス)をもとに「もの」(インスタンス)を生成)なので、インスタンスを生成するためにはクラスを用意し、クラスからインスタンスを作成、そしてインスタンスに情報を追加する。

#クラスの定義
 クラスは`class クラス名`で定義できる。クラスは必ず大文字ではじめ、`end`を忘れずに書く。

“`ruby:index.rb
class Menu
end
“`

#attr_accessor
 インスタンス変数を直接変更して操作ができるようにするもの。情報を持たせるために`attr_accessor シンボル`と書く。1つのクラスに対して複数のインスタンス変数を使うこともできる。

“`ruby:index.rb
class

元記事を表示

個人アプリ作成#1

# 雛形の作成
rails バージョン new app名 -d MySQL で作成

Git hub Desk topと連携してコードの保存

## トップページの作成
スクリーンショット 2020-07-11 3.25.35.png
この後に、投稿一覧を作りたいと思う。

元記事を表示

[Rails]carrierwaveを使って画像を保存する

タイトルの通りになります。

ゴールは画像を表示させるまでとなります。

## gemを導入

初めはgemを入れます。
バージョンを指定しなければ最新のものがインストールされます。

“`:Gemfile
gem ‘carrirewave’
“`

ターミナルでいつものよろしくお願いします。

“`
$ bundle install
“`

## アップローダファイルの生成

次にアップローダファイルを作成しましょう。

“`
$ rails generate uploader Image
create app/uploaders/image_uploader.rb
“`

これで`app/uploaders`の中に`image_uploader.rb`が生成されていると思います。

ちなみに`Image`の部分はマウントするモデル名だとか,
わかりやすい名前。私はよくImageで生成しています。

“`ruby:image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base # Inclu

元記事を表示

NokogiriをRspecでテストする。

Nokogiriに渡す引数をmock化してテストしたので残す。

“`ruby
FUGA_FUGA = [‘企業’, ‘秘密’]
def hogegiri_method(fuga)
HOGE_COUNT = 5
HOGE_COUNT.times do |time|
html = Nokogiri::HTML(OpenURI.open_uri(url))
a, b, c = 正規表現わちゃわちゃ
break if FUGAFUGA.include?(a)
end
{ a: a, b: b, c: c }
end
“`

色々見せられないコードなのでクソみたいなコードだが、、、今回mockとして偽物の戻り値を作りたいのが

“`ruby
html = Nokogiri::HTML(OpenURI.open_uri(‘内緒’))
“`
ここ

だけどNokogiriの戻り値を直接and_returnで設定するのは難しい。

– 戻り値がNokogiri::HTML::Documentといって単純なhtmlとかを返していない
– method内部

元記事を表示

Digdag公式ドキュメントからDigdagを学ぶ-アーConcepts

## 目標
Digdagの公式サイトのドキュメントのConceptsの翻訳+α
http://docs.digdag.io/concepts.html

##目次
[Getting started](https://qiita.com/amagasu/items/92ad70c33f73ab613d08)
[Architecture](https://qiita.com/amagasu/items/572075dcc8b3c8640072)
[Concepts](https://qiita.com/amagasu/items/c850db3b564a7d6dc99c)
[Workflow definition](https://qiita.com/amagasu/items/2a8b84ac8fb4da2d9968)
Scheduling workflow
Operators
Command reference
Language API -Ruby
REST API
Internal architecture
Release Notes

## Projects and revisio

元記事を表示

OTHERカテゴリの最新記事