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

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

Ruby on RailsでAbstractController::Helpers::MissingHelperError:Missing helper file が発生したときの対処法

# 環境
– macOS Version 10.13.4
– Rails 5.2.4
– ruby 2.4

# 状況
「Railsチュートリアル13.2.1 マイクロポストの描画」で
`$ rails generate controller Microposts`
によりMicropostコントローラを作成した後、
`bin/rspec`コマンドを叩くとエラーが発生しました。

# エラーメッセージ
“`
$ bin/rspec
Running via Spring preloader in process 83327

An error occurred while loading ./spec/controllers/account_activations_controller_spec.rb.
Failure/Error: require ‘rspec/rails’

AbstractController::Helpers::MissingHelperError:
Missing helper file helpers/microposts_helper.rb
# ./s

元記事を表示

【Rails】bundle installでbundlerが無いエラーが出る

CircleCIおよび、Dockerイメージ作成時、`bundle install`をすると、以下のエラーが出てしまいました。

“`
/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe’: Could not find ‘bundler’ (2.0.2) required by your /home/circleci/repo/Gemfile.lock. (Gem::GemNotFoundException)
“`

ローカル環境では、`gem install bundler`をしていたので、circleCIのconfig.ymlとDockerfileそれぞれに、`gem install bundler`を書いてあげれば解決しました。

“`config.yml(circleCI)
– run:
name: bundler install
command: |
gem install bundler
“`

“`Dockerfile.

元記事を表示

Rubyシルバー取得前 initializeメソッドまとめ

## initializeメソッドをまとめてみました

– initializeメソッドはnewをするごとに呼び出されるメソッド
– 引数によりclassのデータを初期化する

“`ruby:book.rb
class Book #クラスメソッドBookを定義
def initialize(title) #newするごとに呼び出されるインスタンスメソッド
@title = title #@nameはインスタンス変数
end
def review #インスタンスメソッドreviewを定義
“#{@title}は面白い” #”#{}”で変数を展開
end
end

read = Book.new(“Hoge”)
read.review
“`
実行結果

“`
Hogeは面白い
“`
ただし
変数readの中身を変更することはできない。

“`ruby:book.rb
read.name = “Fuga”
NoMethodError: undefined method `na

元記事を表示

2019卒エンジニアが新卒研修を振り返る

[くふうカンパニーAdvent Calendar 2019](https://qiita.com/advent-calendar/2019/kufu)の8日目!

こんにちは、くふうカンパニーの[株式会社みんなのウェディング](https://www.mwed.co.jp/)でエンジニアをしている@Hanachanmです。
新卒です!

5月からエンジニア研修が始まり、早くも7ヶ月が経ちました。
「えっ、7ヶ月も研修って長くない?何をしているの?」と思う方もいるかも知れませんね。
2019年度新卒エンジニア研修の様子は、くふうカンパニーAdvent Calendar 2019の7日目の記事、[2019年新卒エンジニア研修もそろそろ終盤です。そして2020年へ](https://blog.mwed.info/posts/bootcamp-2019.html)をご覧ください。

簡単に研修について振り返っていきたいと思います。

## 研修の構成
`自ら課題を発見して学べる`、`Railsを利用してウェブアプリケーションを正しく作れる`ようになるため、以下のような構成で研修が行われています

元記事を表示

【Rails】omniauth_callbacks_controllerについて

#はじめに
facebookのログイン機能の実装をしていて、難しいなと思った場所の操作をできるだけわかりやすく書こうと思います。一通りの流れが書いてある記事はたくさんありますが、この一つの操作だけに絞ることは本来はMVCモデルとしてはあまりわかりやすいものではないです、しかし詳しく書くためにあえてomniauth_callbacks_controllerのことだけに留めます。
#omniauth_callbacks_controllerとは
omniauth_callbacks_controllerは主にdeviseの:omniauthableを使う時に使うコントローラーです。
facebookなどが提供しているリソースサーバーからの応答をコールバック として受け取り、どういう処理をするかを書くファイルです。

“`
rails g devise:controllers Model
“`

上記のコマンドを実行すると下記のファイルが生成されます。

“`terminal
app/controllers/users/confirmations_controller.rb
app/c

元記事を表示

Rails 新規アプリケーションの作成

##書かれていること
– アプリケーションの作成とRailsの動き
1.Rails newコマンド
2.DB作成
3.ルーティングの設定
4.コントローラーの作成
5.ビューの表示

– 備考
– Gemとは?
– バージョン確認
– リクエストとは?
– 全体流れ
– 終わりに

##アプリケーションの作成とRailsの動き
####1.Rails newコマンド

– “`cdでアプリを作成したいディレクトリへ移動“`し以下を入力

“`rails:ターミナル
rails new 作りたいディレクトリ名 -d mysql
“`
-d mysqlはデータベースに作成するときの種類をmy sqlにするという指示

#####エラーが出た時

– “`VSC“`で作成したディレクトリを開く
– Gemfileの編集(mysql2と書いてある右側のバージョンを変更する)

“`rails:Gemfile
gem ‘mysql2′,’0.5.3’ #エラー

gem ‘mysql2’,’0.5.2’ #バージョンを下げてみる
“`
– Gemlockファ

元記事を表示

Viewを介さずActiveStorageを使いたい

#解決したいこと
`ActiveStorage 使い方`みたいな感じでググると、viewに画像アップロードのインターフェースを設置した上で、`form_with`を使ってアップロードできます、という記事が多く見られます。
そこで本記事では、viewのアップロードを介さずにモデルと画像とを紐付ける方法をご紹介します。
#どんなユースケース
画像のアップロード機能無しにモデルと画像を紐付けたいことなんてある?という方もいるかと思うので、先に自分が実際に導入したいモチベーションとなったユースケースについて説明します。

僭越ではありますが私は現在、TwitterAPIを通じて、ネット古着屋の情報を収集するサービス[「Clotion」](https://clotion.herokuapp.com/)を鋭意開発中です。(よかったら見ていってください)

このサイトを実現するに当たり、各Twitterアカウントが掲載した画像を取得する必要がありました。各TwitterアカウントはShopモデルとして定義しているので、`Shopモデルがimageモデルを複数持つ` という状況を作ろうとしたときに、`

元記事を表示

既存のRails6プロジェクトをDockerに乗せるハンズオン

# はじめに
作成済みのRails6プロジェクトをDocker上で動作させる手順のハンズオンです。
※DBを使用しないプロジェクトとなっています。

# 環境
macOS Catalina 10.15
Ruby 2.6.5p114
Rails 6.0.1
Docker for mac 19.03.2

# 流れ
1. 適当な名前で`rails new プロジェクト名 -O`する(-O:DBなしで作成する)
2. `rails s`で起動できるか確認する(local環境にyarnがインストールされている必要があります)
3. 確認用のページを作る(見出しだけのhtml.erbとか)
4. Dockerに必要なファイルの作成(今回はDBを使用しないver)
5. Dockerで起動

# Railsプロジェクトを作成
今回は”qiita_test”というプロジェクト名で進めます

“`
$ rails new qiita_test -O
“`
作成したら、とりあえず`rails s`で起動確認しましょう。

# 確認用ページ作成
次に、確認用ページを作成します。なぜ確認用ページが必要か

元記事を表示

【Rails】Twitter認証機能実装の備忘録

#はじめに
オリジナルアプリにTwitter認証機能を実装する際に、いくつかハマったポイントがあったため、忘れないためにも一連の実装の流れをまとめてみたいと思います。

#環境
– Ruby 2.5.3
– Ruby on Rails 5.2.3
– PostgreSQL 11.4

#前提
– Deviseがインストール済みであること
– Userモデルが作成済みであること

#TwitterAPIの取得
この項目に関しては[こちら](https://qiita.com/kngsym2018/items/2524d21455aac111cdee)の記事が非常に参考になりましたので、ぜひそちらを見ていただくといいかと思います。

#gemのインストール
今回必要となるgemは以下になります。

“` Gemfile
gem ‘omniauth’
gem ‘omniauth-twitter’
“`

インストールしていきます。

“`
$bundle install
“`

#Userモデルに必要なカラムの追加
今回追加するカラムは以下になります。

– uid(string)

元記事を表示

【Rails】Deviseの基礎

# 初めに
Deviseはrailsを扱ったことがある人なら誰もが一度は実装するであろう有名なgemです。
しかし、機能自体は実装できたとしてもいまいちどこが動いて実装しているのかわからなかったり、いまいちどんな仕組みなのか掴めていない人も多いのではないでしょうか。
そこで今回はdeviseの基礎基本を自分なりに書いてみました。

#主な機能
Deviseは主に10個のmoduleからなるgemです。
一つ一つのmoduleを組み合わせてみなさんが使っているようなDeviseの機能として機能します。
しかし、最初から全てが機能しているわけではなく、最初は一部のみ機能しています。

|module名|機能|
|:—|:—|
|Database Authenticatable|データベースに保存するパスワードを暗号化する|
|omniauthable|facebookやtwetterなどを利用したログイン新規登録の機能を実装する際に使う(https://github.com/omniauth/omniauth)|
|confirmable|サインインをした際に既にアカウントが登録さ

元記事を表示

Firebaseを使ったTwitter認証をクライアント(Swift)からサーバ(Rails)までまるっと実装する

この記事は ZOZOテクノロジーズ #1 Advent Calendar 2019 7日目の記事になります。
ZOZOテクノロジーズでバックエンドのエンジニアをしている @calorie です。よろしくお願いします。

昨日の記事は @s_nagasawa さんによる「[vue-composition-apiを使って機能単位のコード分割と合成を試してみた](https://qiita.com/s_nagasawa/items/ef70032f996face318e5)」でした。
ちょうど年末にフロントエンドを勉強しようと思っていたので、
とても興味深い記事でした。こちらもぜひご覧ください。

# この記事について

[Firebase Authentication](https://firebase.google.com/docs/auth?hl=ja) を用いたiOSにおけるTwitter認証を、
クライアントで認証を行い、サーバでユーザを作成するまで通して実装してみたので、
その実装方法と得られた知見を、
サンプルコードを用いながら共有します。

やってみると、意外とうまく行かなか

元記事を表示

様々な言語でFizzBuzzプログラムを書いてみた

# いろいろな言語でFizzBuzzを書いてみた

本日はAdvent Calenderの7日目になります。
## はじめに
私自身、Advent Calendarに初投稿ということで、な・な・なんと今回は、ジャブ程度に`Python`・`Ruby`・`JS`でFizzBuzzを書いて見ました。

## FizzBuzzって何?
>「3」で割り切れる数値を引数に渡すと、’Fizz’を返す。
>「5」で割り切れる数値を引数に渡すと、’Buzz’と返す。
>「3」、「5」の両方で割り切れる数値を引数に渡すと、’FizzBuzz’を返す。

## Python version
“`
x = int(input(“好きな数字を入力してください:”))

print(x)
if x % 15 == 0:
print(“FizzBuzz”)
elif x % 3 == 0:
print(“Fizz”)
elif x % 5 == 0:
print(“Buzz”)
else:

元記事を表示

rails Bootstrap4(レスポンシブなNavbar)

railsにてBootstrap4を使って簡単なレスポンシブのNavbarを実装する
##完成品
[![Image from Gyazo](https://i.gyazo.com/18359c7214298e7feb85aa3e5b26618c.gif)](https://gyazo.com/18359c7214298e7feb85aa3e5b26618c)

##環境
ruby:2.5.1
rails:2.5.3
DB:mysql(Sequel Pro)
ブラウザ:Google
OS:Mac(10.14.6)

##Github
https://github.com/tana1818/frutweet

##作成手順

####アプリケーション作成
“`ruby:ターミナルで置きたいディレクトリに移動してから
rails new frutweet -d mysql
“`

 
####Gemインストール、DB作成、scaffoldとマイグレーション実行
“`ruby:frutweet
bundle install #gemをインストール
rake db:create #DB

元記事を表示

datetime_selectで年月日が「2000-01-01」になってしまった件

datetime_selectで年月日+時刻を扱ったけれど、
年月日が「2000-01-01」になってしまった件。
自分の覚書として残します。
 
### バージョン
Ruby:2.6.3
Rails:5.2.3

### 状況
Scheduleモデルにdeadlineカラムを持たせただけ。

“`ruby:views/schedules/_form.html.erb
<%= form_with(model: schedule, local: true) do |form| %>

<%= form.label :deadline %>
<%= form.datetime_select :deadline %>
<%= form.submit %>

<% end %>
“`
こんな入力画面。
![スクリーンショット 2019-12-07 18.56.49.png](https://qiita-image-store.s3.ap-n

元記事を表示

【Rails】簡単に使える暗号化gem`attr-encrypted`を使ってみた

## はじめに
Railsアプリにおいて、ログインパスワードは**bcrypt**を使ってUserモデルに`has_secure_password`と記載すれば簡単に暗号化出来ます。

でも、それ以外にもトークンなど**そのまま保管したくない情報**が出たときどう処理するんだろう?と疑問が発生。

そこで調べたところ、**attr-encrypted**という便利なgemがあったので使い方をまとめました。

[こちらが公式のREADME](https://github.com/attr-encrypted/attr_encrypted)です。

## この記事が役に立つ方
– 暗号化は**bcrypt**の`has_secure_password`しか使ったことがない方

## この記事のメリット
– `attr-encrypted`を使って簡単に暗号化が出来るようになる

## 環境

“`
macOS Catalina 10.15.1
zsh: 5.7.1
Ruby: 2.6.5
Rails: 5.2.4
“`

## 前提・目的

– 今回暗号化したいデータの**カラム名*

元記事を表示

破壊的メソッドと非破壊的メソッドについて

#はじめに
初めまして.この記事がQiita初投稿となります.
本記事は,Rubyの学習中に躓いた破壊的メソッドと非破壊的メソッドについて,両者の違いと扱う際の注意点を書いたものです.

#破壊的メソッドとは
破壊的メソッドとは,レシーバであるオブジェクト自身を変更するメソッドのことです.
小文字を大文字に変換する破壊的メソッド`upcase!`を例に見てみましょう.

“`ruby:upcase!.rb
str = “abc”
str.upcase!
puts str
“`
“`terminal:実行結果
ABC
“`
このように,`upcase!`を使うとレシーバである`str`が書き換えられているのが分かります.

#非破壊的メソッドとは
一方,非破壊的メソッドは,レシーバであるオブジェクトを変更することはありません.`upcase`を例に見てみましょう.

“`ruby:upcase.rb
str = “abc”
str.upcase
puts str
“`
“`terminal:実行結果
abc
“`

このように,`str`は変更されていません.`upca

元記事を表示

SQLite3 終了時のエラー「…>」

#エラーの内容 
Ruby on Railsの学習中にSQLite(バージョンはSQLite3)を使用していましたが、
データベースを終了する際に誤った入力をしてしまい、「…>」という表示され、
その後、何を入力しても、「…>」が延々と表示されるようになってしまいました。

以下のような状態です。

スクリーンショット 2019-12-04 23.28.01.png

#エラーの解決方法
調べたところ、処理が未完了だったことが原因であったため、
「…>」の後に「;」と入力し、enterをしました。

スクリーンショット 2019-12-04 23.34.56.png2つの配列からhashを作る方法

仕事で2つの配列を組み合わせて配列型を作るにはどうすればいいんだと悩んだので、シェアします。

もっとより良い書き方があったら教えて頂ければ幸いです。

“`ruby
numbers = [1,2,3]
words = [‘apple’,’banana’,’grape’]

numbers.zip(words).to_h
=> {1=>”apple”, 2=>”banana”, 3=>”grape”}
“`

元記事を表示

RubyのArrayクラスのメソッドをたくさん使ってみた

Rubyで配列を操作していた際に、知らないメソッドがたくさんあったので片っ端から調べて見ようと思った。

Arrayクラスのメソッド一覧を表示する

“`
p array.methods
“`

Arrayクラスのメソッド一覧

“`
[:each_index, :join, :rotate, :rotate!, :sort!, :sort_by!, :collect!, :map!, :select!, :keep_if, :values_at, :delete_at, :delete_if, :to_h, :reject!, :transpose, :assoc, :include?, :fill, :uniq!, :rassoc, :flatten, :compact, :flatten!, :shuffle, :sample, :permutation, :combination, :repeated_permutation, :shuffle!, :compact!, :product, :repeated_combination, :bsearch_index, :b

元記事を表示

【Rails】ES6が原因でHerokuへのデプロイ失敗 Uglifier::Error: Unexpected token:~

## はじめに
RailsアプリのHerokuへのデプロイにおける`Uglifier::Error: Unexpected token:~`というエラーに対する解決方法を記載します。

## 環境
– macOS Catalina 10.15.1
– zsh: 5.7.1
– Ruby: 2.6.5
– Rails: 5.2.4
– Docker: 19.03.5
– docker-compose: 1.24.1

## エラー内容
“`ruby
Uglifier::Error: Unexpected token: name (任意の内容). To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true).
“`
「ES6を使うには`Uglifier.new(:harmony => true)`で`harmony mode`を有効にしてね」とのこと。

**Uglifier**はJavaScriptの圧縮をしてくれるgem。ただES5までしか対応していません。

## 解決策

元記事を表示

OTHERカテゴリの最新記事