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

Rails関連のことを調べてみた2020年09月07日
目次

Ruby on Railsで現在いるページの判定をする

## current_page?メソッド

viewで使用

“`
# http://hoge.com/fugaかどうか
current_page?(http://hoge.com/fuga)

# /hogehogeかどうか
current_page?(/hogehoge)

# hoge_pathかどうか
current_page?(hoge_path)

# 任意のアクションかどうか
current_page?(action: ‘new’)

# 任意のコントローラ/アクションかどうか
current_page?(controller: ‘hoge’, action: ‘new’)
“`

元記事を表示

[Rails]モデルの単体テスト実装方法

## 前提条件
今回は新規ユーザー登録に関するモデルの単体テストを実装していきながら、方法をアウトプットします。ユーザー登録の仕様書は以下のとおり。

“`
ニックネームが必須
メールアドレスは一意である
メールアドレスは@とドメインを含む必要がある
パスワードが必須
パスワードは7文字以上
パスワードは確認用を含めて2回入力する
ユーザー本名が、名字と名前でそれぞれ必須
ユーザー本名は全角で入力させる
ユーザー本名のフリガナが、名字と名前でそれぞれ必須
ユーザー本名のフリガナは全角で入力させる
生年月日が必須
“`

マイグレーションファイルは以下のとおり。

“`20200823050614_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| ## Database authenticatable t.string :nickname,

元記事を表示

byebugの導入から使い方まで

Railsの勉強の際にデバッグツールは使っていますか?
デバッグツールとは、プログラミングにつきもののデバッグ作業をサポートしてくれるツールのことで、ステップ実行といって一行ごとにプログラムを実行してその時に宣言されている変数の中身をみながら動作を確認する事が出来ます。

それではRailsの開発に使っているbyebugについて紹介していきます。

まずはbyebugのgemをインストールして、デバックしたいコードに「byebug」というメソッドを仕込んでおくと、プログラムがそこを通過した時に止まり、デバッグモードが開始、対話形式でコマンドを打ち込んでおくと自由にメソッドを実行したり変数の値を確認したり出来ます。

# インストール方法
インストールはGemfaileに

“`
gem ‘byebug’
“`

を追記するだけです。 (railsをインストールしている場合はデフォルトでインストールされています)

追記したら

“`
bundle install
“`

でgemをインストールしてきます。

# byebugの使い方
まずbyebugを開始するには、デバッグ

元記事を表示

Rails 6で認証認可入り掲示板APIを構築する #2 gitとrubocop導入

# Githubに上げる

←[Rails 6で認証認可入り掲示板APIを構築する #1 環境構築](https://qiita.com/rf_p/items/a846553c11571f4177eb)
前回の続きから。
とりあえず動くところまでいったのでGithubにpushしましょう。

New repositoryを選択。

その後適当な名前を付けて作成。
他の人からソースコードを見られたくなければPrivateに。問題なければPublicに。

![rep.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/1c4fa022-f9ee-8867-2f20-ecf2507bb2df.png)

Cloud9はデフォルトでgitが入っているのでそのままgitコマンドが使えます。

“`powershell
$ git add -A
$ git commit -m ‘initial commit’
$ git remote add origin https://github.com/{YOU

元記事を表示

【RSpec】FactoryBotを使ってみよう【Rails】

# Factory Botとは??

– テストのためのデータを簡単に作成できるライブラリ
– `Active Record` を使う

# Factory Botのあれこれ

`factory_bot_rails`をインストールすると、下記のようなコマンドで`factory`を作成するためのファイルを作ることができます。

“`
bin/rails g factory_bot:model task
“`
少し解説します。

`bin/rails g`までは大丈夫でしょう。`factory_bot:model`でモデルに明示します。`task`のように対象を指定してあげてください。

このコマンドを実行すると、`spec/factories/tasks.rb`に以下のようなファイルが生成されると思います。

“`spec/factories/tasks.rb
FactoryBot.define do

factory :task do

end
end
“`

雛形ができましたね。この中にデータを定義していきましょう。

“`spec/factories/tasks.

元記事を表示

Railsでワクワク個人開発  第5回: CRUD処理の規制と温度/湿度の登録

# 他ユーザーがCRUD処理できないようにする
 少しだけ涼しくなってきた。朝の開発が心地よくなっている。今のコードでは自分以外のユーザーでも植物のCRUD処理ができてしまうので、それをなくしていこう。`plant_controller.rb`へ`before action`を追加する

“`ruby:app/controllers/plants_controller.rb

class PlantsController < ApplicationController before_action :move_to_index, except: [:index, :show] #----中略---- def move_to_index # 自分以外のユーザーの植物の 編集/削除/新規作成はできない if (user_signed_in?) if (params[:user_id].to_i != current_user.id) redirect_to action: :index end elsif

元記事を表示

railsアプリで simple calendar を使ったページにて、undefined local variable or method `block’ for

#環境
“`
ruby 2.5.1
rails 5.2.4

gem ‘simple_calendar’, ‘~> 2.0′
“`

# 背景
1. Docker+ CircleCiを導入し、ローカルでCircleCIによるrspecが正しく機能するかテスト
2. 以前にはなかった箇所でrspecがfalseになる
3. simple-calendarを使ったページにて、エラーが発生していた

“`
ActionView::Template::Error – undefined local variable or method `block’ for #<#:0x00007ffddc568d58>:
app/views/simple_calendar/_month_calendar.html.erb:25:in `view template’
app/views/application/_calendar.html.erb:1:in `_app_views_application__calendar_html_erb_

元記事を表示

mac環境でrailsを起動する(mysql)

今回はrailsを用いたポートフォリオ作成の為に今までcloud9で開発していたのをローカル環境で行う。その備忘とアウトプットです。
今後も掲載していくので何か気付きがありましたら報告よろしくお願いします!:bow_tone1:

rails ruby などなどはすでにインストールを以前済ませた為mysqlの起動から

mysqldのターミナル上での起動
“`mysql.service start“`

mysqldのターミナル上での起動ステータスの確認
“`mysql.service status“`

mysqlが起動していなかった場合
“`ERROR! MySQL is not running“`

mysqlが起動していた場合
“`Starting MySQL
.. SUCCESS! “`

となるmysqlが起動されステータスokであれば
“`rails s“`でrailsサーバーを起動するtと以下のログが時発生するので

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

Railsチュートリアル テストについて

##はじめに

Railsチュートリアルを学習すると、第3章にいかに「自動化テスト」が重要であるか書いてあります。テストの書き方については色々議論の余地があるそうですが、本記事ではテストについて自分なりに抑えていたほうが良いと思われることをまとめました。

##テストフレームワークについて

テストフレームワークにもいくつか種類があり、それぞれコード書き方等の特徴があります、ここでは主だった2種類のフレームワークを紹介します。

参考にしました →[Railsの人気テストフレームワーク6選!](https://www.atmarkit.co.jp/ait/articles/1108/18/news113.html)
         [RSpecとMinitest、使うならどっち?](https://speakerdeck.com/jnchito/number-kanrk06?slide=38)

### Minitest
 ・Railsのデフォルトのフレームワーク。
 ・学習コストは比較的低い。
 ・Railsチュートリアルでも使用されている。
 ・処理速度は比較的早いといわれている

元記事を表示

Rails 6で認証認可入り掲示板APIを構築する #1 環境構築

# はじめに

Rails APIに関して、チュートリアルがあまり見当たらなかったため作成しました。
なお、筆者自身もRails API触り始めて半年程度なので、誤っている点などあればご指摘ください。

Rails APIモードを使い、掲示板APIを構築してみようと思います。
なお、フロントエンドは本チュートリアルに含みません。
API完成後、ご自由なものを選択してください。

# 対象読者

* [Ruby on Railsチュートリアル](https://railstutorial.jp/)を1周し、Railsアプリケーションの実装方法や用語がなんとなく分かっている方
* モノリシックなRailsではなく、RailsのAPIサーバを構築したい方

RailsのCRUD操作に関する最低限の知識はないと、追いつくのは難しいかもしれません。

# 最終的な環境・Gem

AWS Cloud9
PostgreSQL 9.5.15
Ruby 2.7.1
Ruby on Rails 6.0.3.2

Gem
シリアライザ:[active_model_serializers](https://g

元記事を表示

can’t find gem bundler (>= 0.a) with executable bundleの対処法

既存のRailsプロジェクトをcloneし、`% bundle install`をした際にこのエラーが発生。

“`
% bundle install

Traceback (most recent call last):
2: from /Users/trilingual/.rbenv/versions/2.5.1/bin/bundle:23:in `


1: from /Users/trilingual/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path’
/Users/triringual/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe’: can’t find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
“`

### 原因
Gemfile

元記事を表示

[rails]ネストした関係で親情報を子ビューに表示する方法

#やりたいこと
前提・Itemの情報がないとOrderの情報は成り立たない関係
(Orderにitem_idカラムがある(どのitem情報を指しているのか?))
(親)itemテーブル>(子)orderテーブルになる。

orderコントローラでindexアクションを起動させ(index.html.erb)に
(親)のitem情報を表示させたかったらどうやって記述するの?
※例えば
itemテーブル     
id:1
ぬいぐるみ4000円

orderテーブル
item_id:1
user_id:3
ぬいぐるみ4000円とuser_idが結びつくんだな・・・

#手順

“`
config/routes.rbの記述内容
Rails.application.routes.draw do
devise_for :users
root ‘items#index’
resources :items do
resources :orders, only: [:create, :index]
end
end
“`

#1.親items>子orders

元記事を表示

railsのsessionデータ更新でzero-length delimited identifier at or near “”””のエラー

開発環境である時見慣れぬエラーが出て、もしも本番で発生したらどうすればいいのか途方に暮れそうなので、復旧手順を試行錯誤したメモです。同じエラーが出た場合にヒントになればと思うのですが、同じ状況とは限らないのでご注意。

環境 rails 5.2.4.3 postgresql 12.2 pg 1.2.2 activerecord-session_store 1.1.3

状況
 ログインするサイトで、ブラウザからアクセスした際に以下のエラーが出て、サイトをまったく利用できない。

“`development.log
ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: zero-length delimited identifier at or near “”””
LINE 1: … SET “data” = $1, “updated_at” = $2 WHERE “sessions”.”” = $3
: UPDATE “sessions” SET “data” = $1, “updated_at” = $2 WHERE

元記事を表示

Rails+mecab+Herokuでデプロイエラーが発生した場合の対策

# 事象
– Rails(6.0.0)
– Heroku
– Heroku Buildpacksにmecab(https\://github.com/diasks2/heroku-buildpack-mecab.git)を追加

この条件で、Herokuでデプロイを行った場合、エラーが発生するケースがあると思います。

# 調査

デプロイエラーの内容は下記のようです。

“`
! To update to the latest version installed on your system, run `bundle update –bundler`.
! To install the missing version, run `gem install bundler:2.0.2`
“`

確かに、Gemfile.lockに下記のようにbundlerのバージョン指定をしています。

“`
BUNDLED WITH
2.0.2
“`

そこで、Gemfile.lockのBUNDLED WITH指定を手作業で削除し、再度Herokuでデプロイします。

元記事を表示

文字コードの指定ミスによる、マイグレーションファイルが実行できないエラーについて。

エラーが発生いたしました。

“`
An error has occurred
“`

マイグレーションファイルの実行をした時です。

“`
rails db:migrate
“`

“`
:Error: Specified key was too long; max key length is 767 bytes
“`
キーの長さが最大767バイトを超えてしまったとエラー文です。

直前の自身の操作を思い返してみます。

“`
t.string :name, null: false
“`

キーについてマイグレーションファイルに記述を行なっていました。

では、このキー(:name)が怪しいです。
名前の文字数に関連する何かであると考えられます。

エラー文を検索すると以下の記事に詳細が書かれていました。
https://qiita.com/terufumi1122/items/9ea764618eba01144e09

**RailsやCakePHPのデフォルトで生成される255文字のVARCHARでは、3バイトのutf8では255

元記事を表示

simple_formを使ってみる/子モデルまで編集する

# 概要
simple_formは高機能なフォームを自動作成してくれるgemです。https://github.com/heartcombo/simple_form
フォームを作ってくれるだけでなく、エラーメッセージや項目名なども自動で表示します。

今回はテーブルが2つのシンプルなrailsプロジェクトで、
simple_formを使ってみました

※bootstrapやCSSは一切使っていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591098/46bed595-cde4-1524-2397-8ab32dd7658b.png)

#実装
まずは一番シンプルな実装userモデルのみ実装します

“`ruby:gemfile
gem ‘simple_form’
“`

“`ruby:user.rb
class User < ApplicationRecord validates :name, presence: true validates :email, p

元記事を表示

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第4章】

##前提
・Railsチュートリアルは第4版
・今回の学習は3周目(9章以降は2周目)
・著者はProgate一通りやったぐらいの初学者
##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

第4章です。この章は冗長な内容だった記憶が…。つべこべ言わずやっていきます。
本日のBGMはこちら。
[matryoshka “zatracenie[full album]”](https://www.youtube.com/watch?v=Un46fKZ_0RY)

 
####【4.1.2 カスタムヘルパー メモ】
・新しく作ったメソッド=カスタムヘルパー
・**全てのページで使うヘルパー:app/helpers/application_helper.rb に設置**
・**特定のコントローラだけが使うヘルパー:app/helpers/(該当のコントローラ名).rb に設置**

 
####【4.2.2 文字列 メモと演習】
・putsメソッドは

元記事を表示

GitHubActionsでRuby on RailsのRSpecテストを実行する

Ruby on RailsのRSpecテストをGitHubActionsで実行しようとしたら、そこそこ大変だったのでメモに残しておきます。

# GitHubActionsとは

GitHub上で動作するサーバレスな実行環境です。
リポジトリ内のファイルに設定を記述することで、GitHubの各種操作にトリガして任意のアクションを実行できる仕組みです。
パブリックリポジトリであれば無料で使えます。

今回はPull Requestの作成に紐づけてRSpecを実行することで、Rails用のCIにしようと思います。

# 結論

Railsを実行できるDockerイメージをDockerHubにアップロードして、DockerPullしてテストを実行するのが良さそうです。

# 環境

– Ubuntu 16.04 LTS
– Ruby on Rails 6.0
– Ruby 2.6.6

OS以外は違っても簡単に対応できます。

# Dockerイメージを作ってDockerHubにアップロードする

## Dockerfile

ベーシックな環境です。
必要なライブラリがあれば追記してください

元記事を表示

Rails(ActiveSupport)の*_since、*_agoはダサい!

# 結論

– `*_since`、`*_ago` は使うな
– 代わりに `since/ago/after/before` `+/-` を適切に使おう

# はじめに

Rails便利ですね。
個人的にRailsの中ではActiveRecordが最高のツールですが、ActiveSupportも変態拡張が多くて大好きです。
`current_user.authorized_at <= 1.day.ago # 1.day.before(Time.now)` とか気持ちいいですね。 # あるPR ```rb user.expires_on = Date.today.months_since(6) ``` これを見たときにすっと思考に入ってきますか? 僕はこれが未来を指すのか過去を指すのか即座に判断できません。 英語の例文を考えてみましょう。 ```:「ユーザの権限は6ヶ月後に期限切れとなる」 The user's permission will expire on 6 months after. ``` どこにもsinceは現れません。 ```:sinceを使った例文「ユーザの

元記事を表示

ローカル環境からherokuにデプロイしたRailsアプリを更新したいとき

やりたいこと

ローカル環境からherokuにデプロイしたRailsアプリの内容を更新する。

具体的には、変更したデータベースを反映したい。

(忘備録に残しておきます)

更新方法

ターミナルにて、更新したいアプリがあるディレクトリに移動し、
`$git add -A`
`$git commit -m “Update application”`
`$git push heroku master`

からの、

`$heroku run rails db:migrate`

これでいけました。

git push heroku master時にエラーが発生する場合

gemfileをいじったとき、最後にbundle installをし忘れている可能性があります。

ということで、再びターミナルにて

`$budnle install`

`$git add -A`
`$git commit -m “Update application”`
`$git push heroku master`

`$heroku run

元記事を表示

OTHERカテゴリの最新記事