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

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

インストールするgemのリモートリポジトリを追加する

#環境

Ubuntu 16.04.5 LTS
Windows10
Vagrant

#手順

gemをインストールする時、**gem install**でインストールするが、どこからインストールしているのだろうか?ダウンロード元のリモートリポジトリを確認するコマンドがあります。

“`cmd
$gem sources -l
https://rubygems.org/
“`

では、**rubygems** にないgemをインストールしたい場合はどうすればいいのだろうか?
インストールしたいgemが、GitHubにある場合、リモートリポジトリのリストにGitHubを追加します。

“`cmd
$gem sources -a http://gems.github.com/
“`

“`cmd
$gem sources -l
https://rubygems.org/
http://gems.github.com/
“`

これで、インストールしたいgemが、rubygemsになかった場合は、githubを検索して、ダウンロードしてくれるようになります。

元記事を表示

【Rails】SorceryでTwitter認証

## はじめに
Sorceryを使ったTwitterログイン認証の設定です。
途中までは[【Rails】Sorceryでfacebook認証 Sorceryの設定](https://qiita.com/aiandrox/items/ca798da0bca617074795)と同じなので、そちらをご覧ください。

### 動作環境

“`
ruby 2.5.3
Rails 5.2.4.2
sorcery 0.14.0
“`

### 前提
– Twitter Develpersのユーザー登録とアプリの登録
– [【Rails】Sorceryでfacebook認証](https://qiita.com/aiandrox/items/ca798da0bca617074795)のfacebook認証の部分以外

## 設定
### Sorceryの設定
“`rb:config/sorcery.rb
config.twitter.key = Rails.application.credentials.dig(:twitter, :key)
config.twitter.secret

元記事を表示

ActiveRecord のコールバックを特定のコントローラーの処理のときのみ実行する

## はじめに

ActiveRecord のコールバックを、特定のモデルの状態というよりは、特定のコントローラーの処理の場合のみ実行したい場合について考えたので、簡単にやり方をまとめます。

## tl;dr

方針としては、コントローラーにモデルのインスタンス変数でフラグを付けてあげて、そのフラグが立っている場合のみ実行するという形にしました。

## 例

今回は `Post` モデルの `status` を `create` 時にのみ `created` とつけることを考えます。

## やり方

### モデルにattr_accessor と after_save の設定

まず、`Post` モデルにステータス更新用の `update_status` メソッドを定義します。

また、インスタンス変数のフラグを立てるメソッド`create_executed!` メソッドとフラグ判定メソッド `create_executed?` メソッドも作っておきます。

そして、`after_save` コールバックで、`create_executed?` が `true` のときだけ

元記事を表示

【Ruby on Rails】Ajax通信で特定の要素を変更する

# はじめに
RailsのAjax通信使って特定の要素を編集・更新する方法について記載します。
例で簡単なカテゴリー一覧画面の1つのカテゴリーの名前を更新する処理を使います。

# バージョン
– ruby 2.6.3
– rails 5.2.1

# 画面概要
以下のような画面です。
![スクリーンショット 2020-03-28 22.13.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203478/489c6b4e-a966-b732-2827-0ed39b51b769.png)

この右のほうにある鉛筆マークの編集アイコンボタンを押すと、該当の行のカテゴリー名がフォームに変わります。
![スクリーンショット 2020-03-28 19.32.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203478/16f3c4ee-f645-cb25-f358-d14d88adea94.png)

カテゴリー名を変更

元記事を表示

Qiitaの自分の全ての投稿をダウンロードするRubyスクリプト

Qiitaの自分の投稿をダウンロードするスクリプトを書くのが流行っているみたいだったので、僕も流行りに乗ってRubyで書いてみました。
限定共有記事も含めて自分の全ての投稿をダウンロードできます。
標準ライブラリのみを使用しているので、gemのインストール等は必要ありません。

# サンプルコード

`QIITA_ACCESS_TOKEN`は`read_qiita`権限がついてるアクセストークンに書き換えてください。
アクセストークンの発行はこちらから → [アクセストークンの発行 – Qiita](https://qiita.com/settings/tokens/new)

`OUT_DIR`は出力先ディレクトリパスにご自由に書き換えてください。

“`ruby:download_qiita_items.rb
require ‘open-uri’
require ‘fileutils’
require ‘json’
require ‘date’

# アクセストークン
QIITA_ACCESS_TOKEN = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

元記事を表示

VisualStudioCodeのRubyアウトラインが一部表示されないときは繰り返し処理でdoをつけているせいかもしれない

VSCodeのアウトラインは便利ですね、ショートカットでアウトラインにフォーカス当たるようにしたりしています。

“`
def hoge
end

def fuga
end

def piyo
end
“`

とすると。
◇ hoge
◇ fuga
◇ piyo
みたいに表示されます。ところが

“`
def hoge
end

def fuga
while cond1 do
end
while cond2 do
end
end

def piyo
end
“`
とすると、
◇ hoge
◇ fuga
になってしまうのです。piyo以下が表示されなくなってしまいます。しかし、繰り返し処理の後ろのdoは省略できます

“`
def hoge
end

def fuga
while cond1
end
while cond2
end
end

def piyo
end
“`
とすると、ちゃんと表示されるのです。
◇ hoge
◇ fuga
◇ fuga

一つの関数の中に繰り返し処理が複数出てくるようなコードはよくないのかもれないけれど、ひとまず

元記事を表示

Rubyでナノ秒、PostgreSQLだとマイクロ秒

環境: circleci/ruby:2.4.2-stretch-node-browsers, circleci/postgres:10.12

とあるアプリケーションで、新しくCircleCIを設定してRspecを動かしてみたら、エラーが大量に出ました。

“`
expected: 2020-03-25 12:36:20.477148202 +0900
got: 2020-03-25 12:36:20.477148000 +0900
“`

Rubyはナノ秒(小数点以下9桁)まで時刻を保持し、PostgreSQLはマイクロ秒(小数点以下6桁)までしか保持しないので、比較が失敗しまくっていると判明。ひえー、どうすんのこれ。助けて!

## 用語

参照: [Orders_of_magnitude_(time)](https://en.wikipedia.org/wiki/Orders_of_magnitude_(time))

| 名前 | 単位 | 例 |
|:———|:—————|:——|
| ミリ秒 |10-3<

元記事を表示

応用 Lesson2 検索力についてのまとめ

#応用カリキュラム Lesson2対応 リンク集

エンジニアにとって検索力がとても重要なことを学び、
テキストにあるワードを検索してみました。

##初投稿
まずQiitaの使い方からよく分かりませんので、その辺は徐々に。
とりあえず自身のアウトプットとして書きます。
どなたかの何かのお役に立てたら光栄です。

では、ワードごとにリンクを貼っていきます。
あえて、ワードに対する答えは載せません。
あくまでリンク集です。(自分のためにも…)

##【リンク集 ~Link Page〜】

###1. jQueryのメリット・デメリットは簡単に言うと?

<検索ワード>
 jQuery メリット

<参考サイト>
 AtoOne 様
 https://www.atoone.co.jp/column/10176/

###2. Queryは最近のトレンドの中でどのような立ち位置か?

<検索ワード>
 jQuery トレンド 立ち位置

<参考サイト>
 Hideout der Eremit 様
 https://dereremit.jp/archives/260

###3. dev

元記事を表示

Rails6でアプリ起動時にWebpacker configuration file not foundエラーが発生した時の対処方法

#執筆背景
scaffoldを使って簡単なアプリを作ろうと以下のコマンドを打ち込むと、Webpackerがインストールされていないというエラーが発生したため、記述しておこうと思う。

“`
$ rails new app_name
$ cd app
$ rails g scaffold post content:text
$ rails s

(中略)
Webpacker configuration file not found /Users/ユーザ名/app_name/config/webpacker.yml.
Please run rails webpacker:install
Error: No such file or directory
@ rb_sysopen – /Users/ユーザ名/app_name/config/webpacker.yml
(RuntimeError)
“`

ちなみに、このときのrubyのバージョンは2.7.0、railsのバージョンは、6.0.2.2です。

#結論
このエラーは、webpackerがインストールされていない場合に起こる

元記事を表示

【Ruby】インスタンスメソッド・クラスメソッド・特異メソッドの違い

インスタンスメソッド、クラスメソッド、特異メソッドの違いについてまとめてみました!!

## インスタンスメソッドとは?

– インスタンスから呼べるメソッドのこと

### 定義の仕方と解説
スクリーンショット 2020-03-28 11.14.25.png
Human.instance_methods.grep(/say_hello/)でメソッドがあることがわかるのでインスタンスメソッド
## クラスメソッドとは?
– クラスから呼べるメソッドのこと

### 定義の仕方と解説1
スクリーンショット 2020-03-28 11.26.42.png【ruby,rails】環境変数から読み込んだ秘密鍵の文字列の改行コードがエスケープされていて秘密鍵としてパースできないときの対処法

# 概要
環境変数から読み込んだ秘密鍵の文字列の改行コードがエスケープされてしまうことによって、秘密鍵としてパースできないときの文字列処理を共有します。

# 解決策
たとえば下記のような秘密鍵があったとき、

“`
—–BEGIN RSA PRIVATE KEY—–
MIGrAgEAAiEAvnrd8LBnzAGxCW+i7KtVQSiTsssMtbwcs5styeKsn2kCAwEAAQIh
AKBF8glb5Xqa0cQG0ygg4hIFdipmvEJhiCuhX93krDCBAhEA51bAM0gFPvxyk9Xe
ioIOBQIRANLJEv4Xw7MwT7EEEARL5RUCEBa8bu1bUbCsDPK8nT+NoqUCEQCIzFCU
MY4j7BW8N3vBnhPlAhBgs4tSfe6RbpertixmCygk
—–END RSA PRIVATE KEY—–
“`

環境変数に設定するときは下記のように改行コードを使って、文字列を1行にして設定すると思います。

“`
—–BEGIN RSA PRIVATE KEY—–\nM

元記事を表示

ユーザー管理に必須!Gemの『devise』を使おう!

Railsにおいてユーザーを管理する際に必要となるのが『devise』と呼ばれるGemです。

![68747470733a2f2f7261772e6769746875622e636f6d2f706c617461666f726d617465632f6465766973652f6d61737465722f6465766973652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595506/e29ffb46-fea8-a7e6-73fc-60285b4de3d3.png)

deciseの設定を忘れてしまわないように備忘録として記述します。

#deviseの機能
このGemを使用することによって、ユーザーを管理する機能を追加する際に簡単に管理を行うことができるようになります。

# deviseの設定

##1.Gemfileへの記述
“`
# 省略
gem ‘devise’ # 最終行に追記
“`

##2.ターミナルにてbundle install

“`
$ bundl

元記事を表示

Rails6 + CentOS8にRMagickをサクッと導入する ( MiniMagicも)

railsで画像アップロード機能を作ったとき、
「クソッ、画像が回転してしまう!!!」
という場面にぶち当たる方、多くいらっしゃると思います。

そこで軽くググって、
「RMagickを導入すればいいのか!!!」

「gem “rmagick”」、bundle install

なにかしらのエラーが発生。
「できねえじゃねえか!!!」

というのを経験した方に読んでいただければといいと思います。

# バージョン、前提条件
Ruby 2.6.5
Ruby on Rails 6.0.2.1
CentOS 8

なお、画像アップロードにはActiveStorageは使わず、carrierwaveを使っています。(carrierwaveの説明はここではしません。)
余談ですが、carrierwaveではなくActiveStorageを使うメリットってなんですかね…
もしもActiveStorage絶対使うマンの方いらっしゃれば教えてください。。。

# CentOS8にImageMagickをダウンロード
1\. 開発ツールを入れます。

“`shell
$ sudo dnf gr

元記事を表示

Railsチュートリアル〜6章〜ついにモデル作成へ突入

#userモデルの作成
5章を足早に終わらせて続いて6章に入っていきます。
ここではユーザー登録ページを作成していく。
・ユーザー用のデータモデルの作成
・データを保存する手段の確保について学ぶ。

Railsではデータモデルとして扱うデフォルトのデータ構造のことをモデルと呼ぶ。Railsでは、データを永続化するデフォルトの解決策としてデータベースを使ってデータを長期間保存する。データベースとやり取りをするデフォルトのライブラリはActive Recordという。
Active Recordはデータオブジェクトの作成・保存・検索のためのメソッドを持っている。

#データベースの移行
今回の目的は永続性のあるモデルを構築することである。
Railsでユーザーをモデリングする時は属性を明示的に識別する必要がなく、デフォルトでリレーショナルデータベースを使用する。リレーショナルデータベースはデータ行で構成されるテーブルからなり、各行はデータ属性のカラム(列)を持つ。nameとemailのカラムをもつusersテーブルを作成する。

“`
Userモデルを生成する
$ rails gener

元記事を表示

[graphql-ruby] [ActionCableSubscriptions] subscriptionをtriggerする際に、送るオブジェクトが独自のクラスの場合

# 問題

`Hash`、`OpenStruct`、`ActiveRecord`でない、独自のクラスを下のよう感じで`trigger`した場合

“`rb
AppSchema.subscriptions.trigger(
“your_subscription_name”,
{ },
{
users: users,
}
)
“`

このようなエラーが出る

“`
There was an exception – RuntimeError( Failed to implement User.id, tried:

– `Types::UserType#id`, which did not exist
– `String#id`, which did not exist
– Looking up hash key `:id` or `”id”` on `#`, but it wasn’t a Hash

To implement thi

元記事を表示

【Rails】検索キーワードを空白で2つに分ける

# はじめに
Itemモデルを検索する想定で中身は下記とする。

|id|name|
|——|—-|
|1|test|
|2|sample|
|3|test sample|

# やりたい事
検索フォームにて空白(スペース)を含むキーワードが入力された場合、
空白を境に文字を分けそれぞれのキーワードで検索を行い結果を返したい。

“`ruby:items_controller.rb
# 例えば下のキーワードで検索された場合
@keyword = “test sample”
# そのまま検索しようとすると
@items = Item.where(“name LIKE ?”, “%#{@keyword}%”)
# 結果は”test sample”という文字列を含んだid:3のItemのみが返ってくる
@items.ids => [3]
“`
今回は「test sample」のキーワードで検索された際に、
Itemモデルのデータ全てを返せる事をゴールとする。

# 1.検索キーワードを空白で分ける
まずはキーワードの内の空白を

元記事を表示

RailsアプリにDockerとCircleCIを導入した際、DB周りでエラーになったときの対処法

こんにちは、[ペーパーエンジニアのよしこ](https://twitter.com/K2_Yoshiko)です。

CircleCIで`git push`時に自動テスト(RSpec)しているRailsアプリに、Dockerを導入しました。

その際にデータベース周りで躓いたエラーがあります。

同じエラーの報告が少なかったので、エラー解消した対処法を共有します。

# エラー文

`git push`をトリガーにCircleCIがテストを実行するのですが、その前にデータベースを構築します。
そこでエラーが出ていました。

“` .circleci/config.yml
# DBをセットアップ
– run:
name: DBをセットアップ
command: bin/rails db:schema:load –trace
“`

※全文は下記

“` CircleCI
#!/bin/bash -eo pipefail
bin/rails db:schema:load –trace
** Invoke db:schema:load (first_time)
*

元記事を表示

bundle installできないとき

直った

“`
$ gem install bundler
$ rbenv rehash
“`

## 参考

元記事を表示

どこのページからでもリンクさせたい時

# はじめに
この記事が、初めての投稿なので見にくかったらすみません。。
自分の備忘録も兼ねて、学んだことを書いていきます!

# トップページからしか、リンク出来ない!!
フリマアプリの作成中のことです。

ヘッダーに、ユーザー新規登録ボタンを置いていました。
トップページでは、そのボタンから登録ページへ遷移できます。
ですが、商品検索ページや商品詳細ページでは、ボタンを押してもエラーになってしまいました!!![image.png]
(https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581782/3ba04bce-f720-4a5f-991d-2c734b9b9910.png)

# 絶対パスを相対パスに変更
結論から言うと、絶対パスを相対パスに変えたら解決しました。

絶対パス↓

“`ruby:header.html.haml
%li.listsRight__item.listsRight__item–new
= link_to “新規登録”, “users/sign_up”
“`

相対パス

元記事を表示

Dockerを学習するための記事一覧

# Dockerを学習するための記事をまとめてみました
エラーの対策も記述してます。

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
ERROR: Service ‘web’ failed to build: The command ‘/bin/sh -c bundle install’ returned a non-zero code: 6

## 参考になる記事一覧
今回の動画ではインストール完了済みなので、この記事は飛ばしています。
[DockerをMacにインストールする(更新: 2019/7/13)](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)

今回実施する記事は下記になります。
[DockerでRailsの環境構築](https://qiita.com/minuro/items/1fe38

元記事を表示

OTHERカテゴリの最新記事