- 1. rails db:migrateが失敗!
- 2. RSpecでCSVの値をチェックする
- 3. 【Rails】アソシエーションされたモデルのエラーメッセージ日本語化
- 4. devise(GEM)の適用時のエラー
- 5. Rails 本番環境でデータベースをリセットしようとしたら
- 6. 【rails g.error】
- 7. 【Railsチュートリアル】総合テスト
- 8. 【Railsチュートリアル 5章】レイアウトを作成する
- 9. [Rails6 / jQuery導入] Uncaught TypeError: $ is not a function のエラー解決
- 10. 【Ruby】each_with_indexとsearchを組み合わせたプログラム・考え方
- 11. herokuへアップロードできない
- 12. 【Railsチュートリアル 4章】Rails風味のRuby
- 13. 【Railsチュートリアル 3章】リファクタリング
- 14. operator does not exist: timestamp without time zone ~~ unknownというエラーの対処
- 15. rails g controller コマンドで作成されるファイルを制限
- 16. テーブル設計(Active Hashを利用する)
- 17. (´-`).。oO(標準出力の『Hello』をお手軽に探したい。
- 18. rails イメージ画像表示の仕方
- 19. OAuth 2.0、ぼくのかんがえたさいきょうのscope
- 20. 実装するにあたり、テストを記述したのち、処理をコーディングする
rails db:migrateが失敗!
##rails db:migrateを実行した際のエラー
`rails db:migrate`を実行すると
以下のエラーが出ました!“`
StandardError: An error has occurred, all later migrations canceled:
“`
直訳すると以後の全てのマイグレーションでエラーが発生しキャンセルされましたという内容です。更に、こんなエラーも出ています。
“`
Mysql2::Error: Specified key was too long; max key length is 767 bytes
“`
こちらのエラーは指定したキーが長すぎるためエラーが発生しているようです。
maxのkeyの長さは767bytesのようです。##今回のエラーの仮説
keyの長さがmax767バイトなのに対し、keyが長すぎたためエラーが発生しているようです。railsでデフォルトで生成される255文字のVARCHER型の場合、
◎**utf8mb4は1文字4バイト**、
255×4バイト= 1020バイト
767
RSpecでCSVの値をチェックする
今参画しているプロジェクトでCSVのRSpecは
“`Ruby
expect(csv).to have_content(‘value’)
“`
のような形で書いていたのですが行毎の値を確認する必要が出てきたのでいろいろ調べていたんですが地味に検索で出てこなかったのでメモ。以下のようなcsvを想定
|column_0 |column_1 |
|—|—|
|value_1 |value_2 |
|value_3 |value_4 |“`Ruby
it ‘example’ do
csv_content = Sample.csv_content
csv = CSV.parse(csv_content)
# [行番号][列番号]
expect(csv[0][0]).to eq ‘value_1’
expect(csv[0][1]).to eq ‘value_2’
expect(csv[1][0]).to eq ‘value_3’
expect(csv[1][1]).to eq ‘value_4’# 行毎に比較もできる
【Rails】アソシエーションされたモデルのエラーメッセージ日本語化
railsでエラーメッセージを日本語させている時にちょっと沼ったので忘れないように書いておきます。
### アソシエーションされたモデルに日本語を渡せない
こちらの投稿を参考にさせてもらい、エラーメッセージの日本語化を行いました。
[Railsのバリデーションエラーのメッセージの日本語化](https://qiita.com/Ushinji/items/242bfba84df7a5a67d5b).ymlファイルを作成し、カラム名に日本語を渡していく中で思った通りの動きをしない部分が出ました。
![スクリーンショット 2020-08-25 9.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629679/e7731e4c-7783-cc04-1729-713e146666ec.png)記述したコードはこんな感じです。
![スクリーンショット 2020-08-25 9.40.14.png](https://qiita-image-store.s3.ap-northeast-1.am
devise(GEM)の適用時のエラー
ルーティングのエラーが発生
Routing Error
No route matches [GET] “/”
(以下略)で、パスが見つからないと言う指示だけどroutes.rbにしっかり書いてる。
routes.rbを書き直しようがないのでよくわからなかったけど、deviseを適用するとき、と言うよりgemをインストールするときのrailsサーバーを一度再起動していなかったらしく、サーバーを再起動したら直った。
Rails 本番環境でデータベースをリセットしようとしたら
##この記事について
SQLを勉強し始めて試しに本番環境でデータベースをリセットしようとしたら、エラーが出るようになって色々焦ったので備忘録として投稿##環境
Ruby 2.6.6
Rails 6.0.3.2
AWS/本番環境(EC2, RDS, VPC, EIP, Route53, IAM, S3)##データベースを消す
「本番環境でデータベースをリセットしたい場合」という文を見て、興味本位に以下のコマンドをアプリディレクトリで実行すると本番環境でエラーが出るようになった。“`ruby:qiita.rb
$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rails db:drop
“`エラーが出た理由は単純でデータベースがなくなってしまったから。
##rails db:setupを実行
`rails db:setup`はデータベースの作成、スキーマの読み込み、シードデータを用いてデータベースの初期化してくれるコマンドらしいが、実行すると以下のエラーが吐かれた。`
【rails g.error】
◆ファイル作成時のスペルミス
・rails g model massege
上記でmodelでファイルを作成。その後、コントローラーで初期値の設定をできていないとエラーになり、プログラミング初心者の私は7時間かかって解決できませんでした。
次の日、通っているプログラミングスクールのメンターさんに解決していただきました。◆rails gでファイル名を指定して作成する時はスペルミスをするととんでもないことになりました。
qiitaで書くブログの情報発信らしい内容はまだまだ書けていませんが、有益な情報を発信できるように頑張って学習していきます。
【Railsチュートリアル】総合テスト
# 総合テストとは
アプリケーションの一連の動作を端から端までシュミレートできるもの# 作成方法
テストのテンプレートは以下のコマンドで作成可能“`:コンソール
rails generate integration_test テスト名
“`# HTMLの構造を調べて、レイアウトの各リンクが正しく動くかどうかチェックする
1. ルートURL(Homeページ)にGETリクエストを送る。=>**getメソッド**
2. 正しいページテンプレートが描写されているかどうか確かめる。=>**assert_templateメソッド**
3. Home,Help,About,Contactの各ページへのリンクが正しく動くか確かめる。=>**assert_selectメソッド**
【Railsチュートリアル 5章】レイアウトを作成する
# ナビゲーション
すべてHTMLはクラスとidの両方を指定することができる。
これらは単なるラベルであり、CSSでスタイルを指定するときに使用する。**クラスとidの違いはクラスはページ内で何度でも使用できるが、idは一回しか使用できない点です。**
下のheaderタグには、navbar, navba-fixed-top, navbar-inverseという3つのCSSクラスがスペース区切りで与えられています。
“`erb
“`
下のコードをみてください
. navタグは**内側がナビゲーションリンクである**という意図を明確に伝える役割があります。
. ulタグに付与されているnav,navbar-nav, navbar-rightクラスもBootstrapにおいて特別な意味を持ちます。“`erb
[Rails6 / jQuery導入] Uncaught TypeError: $ is not a function のエラー解決
#開発環境
Ruby 5.2.1
Rails 6.0.3.2#はじめに
rails 5の頃はgemを使ってjQueryをインストールしていましたが、
rails 6からはWebpackerを用いてjQueryをインストールするようになりました。[Rails6でjQueryの導入方法](https://qiita.com/masahisa/items/eaacb0c3b82f4a11fc13)
[Introducing jQuery in Rails 6 Using Webpacker](https://www.botreetechnologies.com/blog/introducing-jquery-in-rails-6-using-webpacker)このあたりの記事を参考に導入していきましたが、このようなエラーが…。
![スクリーンショット 2020-08-23 8.42.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686617/ef152bd5-4058-daf9-b5a0-
【Ruby】each_with_indexとsearchを組み合わせたプログラム・考え方
アウトプット用に記します。
`macOS Catalina10.15.6にインストールしたRuby 2.6.5を使用。`
#やりたいこと#
数を探して何番目に含まれているか結果を返すメソッドを**search**と**each_with_index**を用いて作成したいんよね。###まずこういう配列があるたいな###
“`
input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
“`
###んで、こんな感じに使えるsearchにしたいわけたいな###
“`rubysearch(12, input)
=> 4番目にありますsearch(7, input)
=> その数は含まれていません
“`
###each_with_indexについて###
**each_with_index**はRubyに標準で組み込まれているメソッドの1つたいね。要素の繰り返し処理と同時に、その要素が何番目に処理されたのかも表せるんよ。“`ruby
#each_with_indexの使い方
配列名.ea
herokuへアップロードできない
#環境
・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15#あらすじ
`Rails`でWEBアプリを作成し初めて`heroku`へデプロイするときにうまくできなかったり画面が表示されず困ったのでケアレスミスもありますがその時の対処を載せます。#問題点1(アプリ名)
アプリ名やファイル名に`アンダーバー「_」`は使用できないということ。自分の場合はGithubへもPUSHができませんでした。
`ハイフン「-」`は利用できるので自分の場合はハイフンを変更することにより進みました!#問題点2(マイグレーション)
デプロイ後にマイグレーションしてなかった。初めてのことだったので、この単純な作業になかなか気づけませんでした。。。“`
git push heroku master
“`
その後にDBを作成を忘れずに!“`
heroku run rake db:migrate
“`#問題点3(DBの種類が違う)
`heroku`のDBは『PostgreSQL』であり自分の環境(MySQL)と異なっていたこ
【Railsチュートリアル 4章】Rails風味のRuby
# 引数のデフォルト値
メソッドを呼び出した時に指定した引数は、メソッド側で先頭から順に代入されていきます。
この時、代入するオブジェクトが無かった場合(呼び出し側で指定した引数の数が、メソッド定義側で指定した引数よりも少なかった場合)、
デフォルト値が設定されていればその値が代わりに代入されます。“`ruby
def printHello(msg=”No msg”, name=”No name”)
print(msg + “,” + name + “¥n”)
endprintHello(“こんにちは”, “佐藤”) #=>こんにちには,佐藤
printHello(“お元気ですか”) #=> お元気ですか,No name
printHello() #=> No msg, No name“`
“`ruby
def printHello(msg=”No msg”, name=”No name”)
print(Kconv.tosjis(msg + “,” + name + “¥n”))
end“`
# カスタムヘルパー
Railsのビューでは膨
【Railsチュートリアル 3章】リファクタリング
# DRYなコードを書く
同じコードを書く事はRubyの「DRY」(Don’t Repeat Yourself: 繰り返すべからず)という原則に反する。
# provideメソッド
文字列とラベルを与えて、関連付ける“`erb
<% provide :ラベル, 'タイトル' %>
“`**yieldメソッドを用いて呼び出す**
“`erb
<%= yield(:ラベル) %>
“`# application.html.erbのレイアウト
下のコード内にあるyieldは
例えば/static_pages/homeにアクセスすると
home.html.erbの内容がhtmlに変換され、<%= yield %>の位置に挿入される。“`erb
:application.html.erb
<%= yield(:title) %> | Ruby on Rails Tutorial Sample App
<%= csrf_meta_tags %>
operator does not exist: timestamp without time zone ~~ unknownというエラーの対処
#環境
・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15
・herokuへデプロイ#あらすじ
railsでWebアプリを作成しherokuへデプロイするときにエラーが発生した。heroku log でエラーを確認すると以下のような表示を発見
“`
operator does not exist: timestamp without time zone ~~ unknown
“`
エラー文は初めはよくわからなかったがtimestampとはカラムの型なので型のところで何かエラーが起こっていることがわかりさらに調べて見ました。そうするとDBの検索の条件文に問題点があることが判明。
もうすこし詳しくいうと、データの作成日時で検索をかけていたロジックが以下みたいに文字列(string型)で検索していたため問題が発生。“`
where(‘created_at: LIKE(?)’, “%%-%%-%%”) #左記は問題のコード
“`#原因
原因は端的にいえばherokuのDBは『PostgreSQL』であ
rails g controller コマンドで作成されるファイルを制限
*環境:rails 6.0.3*
`rails g controller <コントローラー名> <アクション名>`
を実行すると、`controller`と`view`以外の、**特に必要のないファイル**が作成される。これを回避するために、`rails`プロジェクト内に、次のファイルを作成すれば,
`controller`と`view`以外のファイルが作成されないようになる。“`ruby:config/initializers/generators.rb
Rails.application.config.generators do |g|
g.assets false
g.helper false
g.skip_routes true
end
“`上記ファイルの作成が面倒なときは、
`rails g controller`コマンドを実行時に下記3つのオプションを追加して実行する。“`ruby:
rails g controller <コントローラー名> <アクション名> –no-assets –no-helper –skip-routes
テーブル設計(Active Hashを利用する)
# 概要
今回は、フリマアプリのクローンサイトを作る上でテーブル設計をしていきました。
初めて自作で作るのでテーブル設計のクオリティはまだまだですが、とりあえずアウトプットということで見逃してください、、、## ER図
このようになりました。
![テーブル設計.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696517/31a51428-7f87-6eaa-15b3-1ed426f07d13.png)ポイントとしては、既存のデータから選択させるような箇所はActive Hashを用いてファイルを用意しておくことです。
商品のコンディションや、購入時の届け先の都道府県など、、、
都道府県を表すprefectures(active_hash)テーブルに関しては発送元と届け先で二箇所利用しています。## Active Hashの使い方
### インストール
Gemfileに以下を記載してbundle installする。“`ruby:Gemfile
gem ‘active_hash’
“
(´-`).。oO(標準出力の『Hello』をお手軽に探したい。
Ruby初心者です。
今日は「Hello World」を出力するだけのrakeタスクを作りました。
“`
# rake hoge:hello
“Hello World”
“`
結果に「Hello」が含まれていることを確認するテストを書いてて、簡潔に文字列指定で探せる方法があれば良いと思ったのですが。。。## コード
“`hoge_spec.rb
require ‘rails_helper’
require ‘rake’RSpec.describe ‘Hoge’, type: :task do
# 中略
describe ‘rake hoge:hello’ do
let(:task) { ‘hoge:hello’ }context ‘標準出力のHelloを探せ’ do
it ‘標準出力でHello #1 outputマッチャーの引数に文字列’ do
# ※理想型。ただし完全一致しないので失敗する。。。
expect{ @rake[task].invoke() }.to output(‘H
rails イメージ画像表示の仕方
アウトプット用に記述しました。
rails のアプリケーションサービスを1から作っています。間違いがあればご指摘お願いします。
今回はアプリケーションサービスにアクセスした際のトップ画面にイメージ画像をフルスクリーンで表示させる方法を記録します。##image_tagメソッドの定義
“`
<%= image_tag "画像の名前", class:"クラス名" %>
“`“`
<%= image_tag "top-img.jpg", class:"pict" %>
“`表示するファイルの置き場所はapp/assets/imagesフォルダとpublicフォルダの2つが用意されています。
今回私はダウンロードしてきた画像をapp/assets/imagesフォルダに入れました。
![image_tag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674511/f6321e27-f591-adf5-bedd-df3ef48fe5b7.png)リロードすると
OAuth 2.0、ぼくのかんがえたさいきょうのscope
※ OAuth 2.0の規程に則って「認可サーバーを作成する」側の話です。
OAuth 2.0では、 `scope` というパラメーターでアクセス範囲を表します。
> クライアントは scope リクエストパラメーターを用いて要求するアクセス範囲を明示することができる.
同様に, 認可サーバーは発行されたアクセストークンの範囲をクライアントに通知するために scope レスポンスパラメーターを使用する.このscopeですが、どんな形式にするかは実装者に委ねられています。RFCが定めている制約といえば下記くらいのものです。
* 大文字と小文字は区別する
* スペースは使えない(複数のscopeをスペース区切りで表すため)
* scopeを省略しても良いことにしても良い(その場合デフォルト値を定義する)ref. https://openid-foundation-japan.github.io/rfc6749.ja.html#scope
**めっちゃ自由。**自由すぎてどんな形式にするのが良いかちょっと悩みます。
この記事では他社事例を見た後、ぼくのかんがえたさいきょうのs
実装するにあたり、テストを記述したのち、処理をコーディングする
### 背景
現場でのあるあるですが、普段は以下の流れで開発を進めることが多いと思います。
(1)設計→(2)処理のコーディング→(3)テストのコーディング→(4)単体テストなど…しかし、Railsチュートリアルでは、
(1)設計→(2)テストのコーディング→(3)処理のコーディング…
という流れで解説されていました。自分も少し勉強になったので、記事として掲載しようと思います。### 環境
| 項目 | 内容 |
|:—————–|:——————:|
| OS | aws #35-Ubuntu SMP(Cloud9)|
| Ruby | ruby 2.6.3p62 (2019-04-16 revision 67580) |
| Ruby On Rails |