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

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

Rails 本番環境で画像が読み込まれないエラー

##この記事について
本番環境でbackground-imageの画像を読み込む時にはエラーが出ないのに、image_tagのところだけでエラーが出てしまっていたので、そのエラー解決方法について

##環境
・Ruby 2.6.6, Rails 6.0.3.2
・Docker,Docker-compose(開発環境)
・AWS/本番環境(EC2, RDS, VPC, EIP, Route53, IAM, S3)

##参考URL
https://stackoverflow.com/questions/49440304/rails-asset-is-not-present-in-asset-pipeline-when-using-image-tag
この人と全く同じ現象になってました。

##出ていたエラー
“`ruby:qiita.rb
ActionView::Template::Error (The asset “chat_example.jpeg” is not present in the asset pipeline.):
“`
asset へのパイプラインがうまく

元記事を表示

RubyKaigi2019 スライドまとめ

## RubyKaigi2019
4/18-20まで福岡国際会議場で開催されるRubyのカンファレンスです。
各スピーカーのスライドをまとめました。

## 4.18 スピーカー

### Performance Improvement of Ruby 2.7 JIT in Real World
Takashi Kokubunさん https://twitter.com/k0kubun
スライド https://speakerdeck.com/k0kubun/rubykaigi-2019

### Pragmatic Monadic Programing in Ruby
joker1007さん https://twitter.com/joker1007
スライド https://speakerdeck.com/joker1007/pragmatic-monadic-programming-in-ruby

### A Type-level Ruby Interpreter for Testing and Understanding
Yusuke Endohさん https://t

元記事を表示

Controller作成と同時にアクションとviewファイルを作成(rails)

#Controller作成と同時にアクションとviewファイルを作成
railsではcontrollerを作成する際、同時にアクションとviewファイルを作成することができます。
実際に手動でアクションやviewファイルを作成する手間を省くことができます。
以下がコマンドの型です。

“`
$ rails g controller コントローラ名 アクション名
“`

例えば、book controllerを作成し、newアクションを追加したい場合、、、

“`
$ rails g controller book new
“`

こんな感じになれば、成功。

“`
[vagrant@localhost sample_app]$ rails g controller books new
Running via Spring preloader in process 25819
create app/controllers/books_controller.rb
route get ‘books/new’
invoke erb

元記事を表示

カラムの追加と削除

#カラムとは?
カラムとはデータベースの中のテーブルが持つ要素です。
例えば、ユーザーというテーブルの中の「名前、生年月日、住所」などの項目をカラムと言います。

#カラムの追加
新たに別のカラムを追加したいということはよくあると思います。
そんなときは以下のコマンドでカラムを追加です。

“`
$ rails g migration Addカラム名Toテーブル名 カラム名:型名
“`

例えば、「User」というテーブルに「name」というカラムを追加したい場合、

“`
$ rails g migration AddNameToUsers name:string
$ rails db:migrate
“`

ここで「rails db:migrate」を忘れてしまうと、テーブルへ反映されませんので、
気をつけてください。

#カラムの削除
カラム名を間違えて登録した時など、カラムを削除したいこともあると思います。
カラムを追加する時とあまり変わりません。

“`
$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名
“`

「Us

元記事を表示

【Rails】エラー解決 Unsupported argument type: 1 (Integer)

###はじめに

今回は
`Unsupported argument type: 1 (Integer)`
こんなこと言われた時の対処方を記述します
お決まりのタイプミスによって発見したエラー文です笑

###解決策

***intger型の1という引数は期待してません***、という感じのエラー文です。

という事は違う物を期待してるところで整数の1を渡してしまっているという事です。

“`rb
User.find_by(session[:user_id])
“`
犯人はこれでした!

`find`と書くべきところを間違えて`find_by`と書いてますね、なので`find_by`のカラム名を書くところに`session[:user_id]`が入っているせいで、今回は[1]という整数が入ってるのでそのまんま[1]って名前のカラムを探しに行こうとしてしまった、そんな感じみたいですね。

>↓こんな感じの事ですね!

>“`rb
>User.find_by(1)
>“`

という事で

“`rb
User.find(session[:user_id])
“`
`find`に書

元記事を表示

railsでmodelを作成する方法

#railsでmodelを作成する方法
modelはデータベースとのやりとりを行ってくれます。
modelを作成するコマンドはこんな感じです。

“`
$ rails g model モデル名
“`

モデル名の命名規則は、「User」のように、英数字の単数形で指定します。
また、先頭は必ず英大文字で記述します。

実際に、modelを作成するためのコマンドを打つとこんな感じです。

“`
$ rails g model User
“`

成功すると、、、

“`
$ rails g model User
Running via Spring preloader in process 4271
invoke active_record
create db/migrate/2020072951856_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb

元記事を表示

railsでルーティングを設定する方法

#railsでルーティングを設定するには
routing(ルーティング)では、ユーザが特定のURLにアクセスした時に、
どのコントローラのどのアクションに処理を振り分けるかを定義します。
ルーティングは、URLとアクションを結びつける役目をしています。
例えば、「あるURLにアクセスがあった時に、homeコントローラのtopアクションの処理を振り分ける」という定義を、ルーティングに記述します。

ルーティングの設定は、configフォルダ内のroutes.rbファイルに記述します。
routes.rbファイルは、Railsアプリを作成するときに自動作成されるファイルです。
こんな感じです。

“`
HTTPメソッド ‘URL’ => ‘コントローラ#アクション’
“`

※HTTPメソッドについてはこちらの記事で説明しています。
https://qiita.com/yusuke1209kitamura/items/e29787bc2920a656d505

わかりやすく、実際に書いてみます。

“`
Rails.application.routes.draw do
get ‘

元記事を表示

Controllerにアクションを追加する方法(rails)

# Controllerにアクションを追加するには
controllerを作成したあとは、アクションを記述する必要があります。
アクションとはコントローラに定義されている処理内容です。ユーザーが実際に呼び出して使います。

アクションはcontrollerファイルに対して、こんな感じで記述します。

topページを表示したい場合
def~の後は表示したいviewページの名前になります。

“`
class HomesController < ApplicationController def top end end ``` defはdefine(定義する)を意味します。

元記事を表示

不動点コンビネータを用いた無名再帰関数の実行まとめ

諸般の理由で『[Pythonのlambda式を用いたラムダ計算の基礎表現](https://qiita.com/ytaki0801/items/fb4edeba41ff1bfb4b52)』を書いた後にHaskellに触れたところ,無名再帰関数を実行する不動点コンビネータがとんでもなく簡単に書けたため,同じ方法で他のプログラミング言語でもできないか試したところ,これまたあっさりできたので,まとめメモ的に新しく記事にした.

このような内容がQiitaや書籍,ネット上に星の数の更に星の数乗ほどあることは承知しているが,この手の話はYコンビネータが大きな割合を占めており(実際,元記事でも取り上げている),関心のある人々の数多ある参考資料のひとつ程度に捉えてもらえると幸いである.ツッコミ,編集リクエスト歓迎.

#不動点コンビネータの定義
Haskell,Scheme,Python,Ruby,JavaScriptでの実行例を述べる.なお,不動点コンビネータとは,$f(g(f))=g(f)$が成り立つ関数$g$を指す.

##Haskell(GHC)

式に従い,不動点コンビネータを定義する.

元記事を表示

Jekyllはカスタムプラグインを使うと色々できるよという話

この記事では、静的サイトジェネレーター「[Jekyll](https://jekyllrb.com/)」のカスタムプラグインで柔軟にサイトをいじる方法を紹介します。

もうちょっとピンポイントな記事もあります: [JekyllでパーマリンクにFront Matterのカスタム変数を使う方法](https://qiita.com/yuki384/items/4b04b866b475fb8b1de9)

## そもそもJekyllとは?
[Jekyll](https://jekyllrb.com/)は、Ruby製のシンプルな静的サイトジェネレーターです。ブログなどを書けるような機能が備わっています(便利!)。.mdファイルや.htmlファイルなどを、Webサイトの表示に必要なファイル一式にして書き出してくれます。共通部分のレイアウトをまとめてかけたり、記事をマークダウン形式で書けたりと、そのままでもとても便利に使えます。

しかし、Rubyで書かれたプラグインを活用することで、**さらに**様々な実装ができます。

### プラグインについて
プラグインは、gemやローカルの.rbファイル

元記事を表示

RSpecの単体テストにて”translation missing: ja.activerecord.○○”というエラーが出たときの対処法

Deviseを日本語化したときのエラー。エラー画面はこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484801/6a887d1b-3688-0d46-a527-5d7299cbb4bb.png)

この辺の記事を参考にしました。
・Devise日本語化後の「translation missing」に対処する

・translation missing: ja.activerecord.errors.models.hoge.attributes.base.restrict_dependent_destroy.many の対処方法
https://qiita.com/moperon/items/da8cd6e674dba2552c42
・Createの際のエラーUser translation missing: ja.activerecord.errors.model

元記事を表示

[Rspec]Fabricateの基本的な使い方まとめ

なんとなく使えてしまうFabricateですが、ふとしたきっかけでちゃんと理解したいなと思ったのでまとめました。

## Fabricateとは
オブジェクト生成ライブラリです。
テストで使用するためのオブジェクトを簡単に作成できます。

## 使い方
非常にシンプルで、モデルの属性に無難なデフォルト値を設定します。
サンプルで`person`というオブジェクトを定義しました。

“`ruby
Fabricator(:person) do
name “Niki”
age 23
end
“`

### 生成メソッド
生成メソッドは3種類あります。よく使うのは`Fabricate.build`と`Fabricate`。

“`ruby
Fabriate(:person)
# newしてsaveしたものを返す
Fabricate.build(:person)
# newだけしてsaveはしない
Fabricate.attributes_for(:person)
# 属性のHashを返す
“`

一見`Fabricate.build`は必要なくない?となりますが、これは間違い

元記事を表示

【Sinatra】エラー解決 Rack::Flash::SessionUnavailable at /

###はじめに
この記事の内容はSintaraでの開発中、rack-flash3を使ってフラッシュを表示させようとした時に発生した下記エラー、

`Rack::Flash::SessionUnavailable at /`
`Rack::Flash depends on session middleware.`

の解決方法について学んだ事を記しています。

###解決への道のり

エラーを出したソースコードはこちら↓

“`rb

require “rack-flash”

use Rack::Flash
“`

エラー文は***Rack::Flashのセッションが利用できません、Rack::Flashはセッションミドルウェアに依存していますよ!***ってな感じに訳せるかと思います。

という事でメンターさんにも聞いたりもしつつ、いろいろ調べて、READMEを見ていたら、ヒントがありました!

>参考、引用)https://github.com/nakajima/rack-flash

>If you’re using Sinatra, you can use the fla

元記事を表示

コントローラーでのデータ検索等

#データの絞り込み
データの絞り込みは下記の構成

例)Task.all.first
Task = 起点
all = 絞り込み条件
first = 実行部分

##起点

処理対象のモデルのクラス

##絞り込み条件

|メソッド | 効果 |
|:—————–|:——————|
| where | 特定のレコードの検索 |
| order | 検索結果の並び順を指定 |
| joins | 他のテーブルとのJOINを指定 |
| group | 指定したカラムの値を基準にデータをグループ化 |
| select | 指定したからむだけを属性として取得する |
| limit | 取得個数を制限する |
| distinct |取得するカラムの値が一致しているデータは除外してデータを取得 |
| all

元記事を表示

Controllerを作成しよう

#Controllerを作成する
コントローラでは、ユーザーのリクエストを受けてModelと連携したり、
どの画面(View)を表示するかを制御しています。
ユーザーがURLにアクセスしたときに、リクエストを最初に受け取るのがコントローラです。
受け取ったリクエストを元にして、Modelからのデータを、対応するViewに渡して画面を表示させます。

具体的には、以下のような制御を行っています。

Modelとやり取りする
Viewに渡すインスタンス変数を定義する
表示するViewファイルを指定する

controllerを作成するのは以下を実行するだけです。
gはgenerateの略称です。

“`
$ rails g controller コントローラ名
“`

ただ、一つだけ注意があります。
コントローラー名は複数形になります。こんな感じです。

“`
$ rails g controller homes
“`

成功するとこんな感じになります。

“`
[vagrant@localhost sample_app]$ rails g controller homes
Ru

元記事を表示

MVC(Model View Controller)を理解しよう

#MVC(Model View Controller)とは?
railsはMVCという考え方で構成されています。
全てのコードを同じ場所に書いてしまうと、コードが複雑になるため、
railsでは、保守性を維持するために、Model、View、Controllerの3つの処理パターンに分けて管理しています。

###model
データを扱う部分です。
データベースに対して、データの登録や取得、更新、削除などの処理を行います。

###view
PCの画面に関わる部分です。
HTMLを読み込み、ブラウザに表示させるためのものです。

###controller
modelとviewの中間に位置します。
ユーザーからのリクエストを受けて、Modelと連携したり、どの画面(View)を表示するのかといったことを制御します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681053/9ffd80e8-a86c-8a2f-8d8d-6573020739eb.png)

元記事を表示

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

#rails newで作成
railsで新規アプリケーションを作成するのは簡単です。
rails newコマンドだけで作成できてしまいます。

“`
$ rails new アプリケーション名
“`

#もしアプリケーション名を間違えたら?
アプリケーション名を間違えて作成してしまっても安心です。
このコマンドでアプリケーションを消してしまいましょう。

“`
$ rm -rf アプリケーション名
“`

rmはremoveの略称です。
-rf remove recursively forceの略)はコマンドオプションの1つで、「フォルダ内のすべてのファイルとフォルダを削除する」を意味します。

#作成したアプリケーションを確認
rails newコマンドでアプリケーションの作成が完了すると以下のような画面が出ます。
この画面が出たら、成功です。

“`
[vagrant@localhost sample_app]$ rails new sample_app
create
create README.md
create Rakefi

元記事を表示

[Ruby]Sheets API v4のupdate_spreadsheet_valueでNameErrorが出たときの対処方法(uninitialized constant ActiveSupport::JSON (NameError))

Rubyからスプレッドシートのセル情報を読み書きしたくて、まず公式が提供しているQuickstartを試してみました。
[Ruby Quickstart  |  Sheets API  |  Google Developers](https://developers.google.com/sheets/api/quickstart/ruby)

Quickstartではシートのセル値を取得まであり、セルを更新(値を書き込む)は用意されておりませんでした。

なのでドキュメントやQiitaを参考に試したのですが、エラーが出たためその解決方法を書いていきたいと思います。

SheetsAPIの操作はQuickstartと同じ`google-api-ruby-client`を使用しています。

# `uninitialized constant ActiveSupport::JSON (NameError)`の対処方法
`update_spreadsheet_value`にてセルの更新を行おうとしたときに、`uninitialized constant ActiveSupport::JSON

元記事を表示

Rubyで「ある期間の毎月1日」をDateオブジェクトの配列として取得する方法

Rubyの小ネタです。

## お題

2020年4月1日から2021年3月1日まで、1年分の「xxxx年xx月1日」のDateオブジェクトを配列として取得するコードを書いてください。

イメージとしてはこんな感じです。

“`ruby
# 見やすいように文字列の配列にしていますが、本当はDateオブジェクトの配列を取得するのがゴールです
[
“2020-04-01”,
“2020-05-01”,
“2020-06-01”,
“2020-07-01”,
“2020-08-01”,
“2020-09-01”,
“2020-10-01”,
“2020-11-01”,
“2020-12-01”,
“2021-01-01”,
“2021-02-01”,
“2021-03-01”
]
“`

## 解答例

こんな感じで書けます。

“`ruby
require ‘date’
start_date = Date.parse ‘2020/04/01’
end_date = Date.parse ‘2021/03/01’
(start_dat

元記事を表示

Railsで開発中にLocalのMySQLのバージョンを8系から5.7に変更したらいろいろハマった

現在Railsでポートフォリオ作成中のたか(@ktkr7195)です。

Sequel Proを使ってDBの情報を参照しようとしたら、MySQL8系だと繋がらない問題に打ち当たり、バージョンを5.7にすれば治るらしいという記事を拝見し、変更したら事件が起きました。

#環境
– Rails 5.2.4
– macOS 10.15.5
– MySQL 5.7
– ruby 2.5.1

#状況
まずHomebrewで`brew install mysql`でMySQLをインストールしてローカルで開発をしていました。おそらく、バージョン指定しないと最新の8系がインストールされます。`rails db:create`や`rails db:migrate`等無事に成功し、アプリケーションが表示されるようになりました。開発を進めていく中でDBを参照することが多くなったのでSequel Proを使おとしたら弾かれてしまい[こちらの記事](https://pqtomblog.com/2018/09/20/connecting_mysql_by_sequelpro/)を参考に修正したら`rails d

元記事を表示

OTHERカテゴリの最新記事