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

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

【Ralis】単体テストについて

## 最初に

Rspcを用いてモデルのバリデーションの単体テストを行った際の手順を備忘録として残します。

## Rspecとは
RubyやRailsの代表的なテストツールのことで、クラスやメソッド単位でテストするために使用するためのgem。

##環境
・Rails 5.0.7.2
・Ruby 2.5.1
・rspec-rails 3.9.0
・factory_bot_rails 5.1.1

## 事前準備

### 1.rspecとFactory_bot gemの導入

~~~
#gemfile

group :development, :test test do
#開発環境とテスト環境で使用したいのでこの中に記述。
gem ‘rspec_rails’
gem ‘factory_bot_gem’

end
~~~
gemを記述できたらbundle install

### 2.rspecファイルの作成と動作確認

ターミナルで、

~~~
$ rails g rspec:install
~~~
コマンド実行後下記のようにファイルが作成されればok。
~~~
create .

元記事を表示

railsのmigrateファイルメソッド一覧

| メソッド | 用途 |
|:–|:–|
| add_column | カラムを追加する |
| remove_column | カラムを削除する |
| remove_columns | 複数のカラムを削除する |
| rename_column | カラムの名前を変更する |
| change_column | カラムの情報を変更する |
| create_table | テーブルを作成する |
| drop_table | テーブルを削除する |
| rename_table | テーブル名を変更する |
| add_index | インデックスを追加する |
| remove_index | インデックスを削除する |
| add_reference | 外部キーを作成する |
| remove_reference | 外部キーを削除する |
| add_foreign_key | 外部キー制約を作成する |
| remove_foreign_key | 外部キー制約を削除する |

元記事を表示

正規表現の基礎

###概要
irbを使って正規表現について見ていきます。

`irb`

“`irb
irb(main):001:0> name = “taro”
=> “taro”
irb(main):002:0> name.sub(/taro/,”kotaro”)
=> “kotaro”
“`
subメソッドを使ってtaroという文字をkotaroに置き換えています。
第1引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を記述します。

“`irb
irb(main):004:0> name.match(/taro/)
=> #
irb(main):005:0> name.match(/bob/)
=> nil
“`
matchメソッドを使って引数に指定した文字列が含まれているかをチェックしています。
含まれていた場合は指定した文字列がMatchDataオブジェクトとして返り値で返ってきます。
含まれていなかった場合はnilが返ってきます。

“`irb
irb(main):006:0> array =

元記事を表示

[Rails]テーブルのカラム追加、型変更、型確認方法、カラムの型の種類

# こんな時
あ。追加でカラム欲しいな。
あ。型変更したいな。
カラムの型を簡単にさっと見たいな。
型っていっぱいあったよな、どれがなんだっけ。

# 記載事項
1.カラム追加方法
2.カラムの型変更方法
3.ターミナルでの型確認方法
4.カラムの型の種類(毎回ここに[Rails](https://railsdoc.com/migration)見に行ってるので、Qiitaに持ってきます。)

# 1.カラム追加方法

“`ruby:ターミナル
rails g migration Addカラム名Toテーブル名 カラム名:データ型

# postsテーブルにstart_timeカラムをtime型で追加
rails g migration AddStartTimeToPosts start_time:time

# マイグレーションファイルが作成される
# create db/migrate/~~~_add_start_time_to_posts.rb
“`

ファイルを編集。
他にもカラム追加したかったので追加。
null: falseもつけて、空のデータは保存不可にします。

元記事を表示

Failed to find Chrome binary について

#前提
本日学んだことを書いていきます。
Docker
Ruby on Rails
Ruby

#本題
Capybara でのテスト実行時に以下のようなエラーが出てしまい、ハマりました。。。

“`
Failure/Error: visit login_path

Webdrivers::BrowserNotFound:
Failed to find Chrome binary.
“`
Chrome binary が見つからない?
Chrome がないのが原因?
Docker環境内のためChromeが入っていないのかなと思いました。

#解決方法

“`capybara.rb
#変更前
Capybara.register_driver :chrome_headless do |app|
options = ::Selenium::WebDriver::Chrome::Options.new

options.add_argument(‘–headless’)
options.add_argument(‘

元記事を表示

Railsの基本理念

Railsの生みの親DHHが書いた基本理念をまとめました

https://rubyonrails.org/doctrine/#optimize-for-programmer-happiness
https://postd.cc/rails-doctrine/

# 1. プログラマの幸福度を最適化

DHHがRailsを作った理由は「自分が笑顔になるため」

論理的ではなくむしろ病的だが、自分が幸福になるために作ってきた

Railsのコミュニティは幸福のために集まり、幸福の最適化によってRailsは形成されてきた

# 2. 設定より規約 (Convention over Configuration、CoC)

Railsの生産性に関する初期のモットーは「無駄な個性をやめれば、平凡な決断で苦労することなく、重要な場面で仕事のスピードが増す」データベースの主キーがidか、postIdか、posts_idか、pidか議論するのは無駄設定から規約に移行することで、無駄な熟考を避け生産性を高めることができる

加えて、規約は初心者のハードルを下げてくれるRailsの規約の中には初心者が知ら

元記事を表示

100日後に1人前になる新人エンジニア(5日目)

#100日後に1人前になる新人エンジニア(5日目)

[100日後に1人前になる新人エンジニア(4日目)](https://qiita.com/akilax/items/dc315b5452b39caaf15e)

どうもこんばんは早くも5日目になりました。
今日のお題はRailsのroutesに関してです。
調べてみると結構いろんなルールがありましたのでまとめてみたいと思います。

##Rails のルーティング
###Railsルーター
Railsのルーターは受け取ったURLを認識し、適切なコントローラ内アクションに割り当てるよ。

“`
GET /patients/17
“`
こんなURLでリクエストがあったとき

“`
get ‘/patients/:id’, to: ‘patients#show’
“`

patientsコントローラのshowアクションに割り当てられられています。
17の部分は :idに対応しているよ。
to: 以降は ’コントローラー#アクション’ って感じで対応付けがされています。

###Resourc

元記事を表示

ユーザー登録時のエラーメッセージ、サクセスメッセージの表示の仕方

#はじめに
RailsでWebサービスを作成の際にサインんアップ時のフラッシュメッセージの表示の仕方を自分の得た知識の整理のために記事を作成しました。
基本はRailsチュートリアルで得た知識になります。
#前提条件
– Railsを使用したWebサービスを作成途中で、すでに基本的なログイン機能を自分でdeviceを使用せず作ったとします。
– バリデーション実装済み

###controller
“`ruby:
def create
@user = User.new(user_params) 
if @user.save #@userの保存に成功
redirect_to @user  #ユーザー詳細にリダイレクト
else
render ‘new’  #失敗時は新規登録へ戻る
end
end

private

def user_params
params.require(:user).permit(:name, :email, :password,

元記事を表示

【Rails 6】active_strageの画像の保存タイミングが変更された

今回はRails6から画像の保存のタイミングが変更したようなので調べてみました。

#Rails バージョンの確認

“`
$ rails -v
Rails 6.0.2.1
“`

#ActiveStrageのインストール

“`
$ rails active_storage:install
$ rails db:migrate
“`

#画像添付の準備
最終成果物を載せます。

routeにpreviewを追加します。

“`ruby:route.rb
Rails.application.routes.draw do
resources :users do
collection do
post :preview
patch :preview
end
end
end
“`
モデルにhas_one_attachedで画像を扱えるようにします。

“`ruby:user.rb
class User < ApplicationRecord has_one_attached :image end ``` 次にcontr

元記事を表示

ログイン、サインアップ画面のビュー変更

1.devise用のビューファイルを作成
 deviseでログイン機能を実装すると、ログイン・サインアップ画面は自動的に生成されるがビューファイルとしては生成されない。これは、deviseのGem内に存在するビューファイルを読み込んでいるため。

ビューファイルに変更を加えるためには、deviseのコマンドを利用してビューファイルを生成する必要がある。

ターミナルで
 rails g devise:views
 新規作成されるファイル
 app/views/devise以下のディレクトリにあるビューファイル各種

2.ログイン・サインアップ画面のビューファイルを編集する
 サインアップ画面
 app/views/devise/registrations/new.html.erb
 ログイン画面
 app/views/devise/sessions/new.html.erb

元記事を表示

rails cでカラム確認する方法

> User.column_names

元記事を表示

『kaminari』配列に対してページネーションを作成する方法

#はじめに
今回は、配列に対してページネーションを作成しビューで表示するまでのサンプルコードを紹介します。

##コントローラー

お気に入りした商品をユーザーのマイページにて表示するためにコントローラーでこのようなコードを書きました。実はこれ、アソシエーション組めばもっと簡単にできるので以下の記事を参考にしてみてください!
https://qiita.com/yummy888/items/22db2f8b79b5be148b69

“`ruby
def index
items = []
likes = Like.where(user_id: params[:item_id])
if likes.present?
likes.each { |like| items << Item.find(like.item_id)} end @items = Kaminari.paginate_array(items).page(params[:page]).per(15) end ``` user_idになんでparams[:item

元記事を表示

PAY.JPで登録したクレジットカードで商品購入機能を実装する

#はじめに
個人アプリにて、クレジットカード決済を行うため、PAY.JPを導入しました。
機能実装に関して、備忘録として記載しています。

前回の記事
[PAY.JPでクレジットカードの登録・削除機能を実装する](https://qiita.com/kenzo-ta/items/3eb590b962384c266381)

# 前提条件
– Rails 5.2.4.2
– Ruby 2.5.1
– devise使用
– haml使用
– VSCode使用

前回までにカード情報の登録を行うためCardモデル及びCardコントローラーを作成しました。
今回は新たに購入用モデル及びコントローラーを作成して購入処理を行っていきます。

# 手順
1. モデルの作成
2. テーブルの作成
3. コントローラーの作成

## モデルの作成
今回はOrderモデルを作成していきます。

“`ruby
class Order < ApplicationRecord belongs_to :user has_many :products, through: :order_details

元記事を表示

PAY.JPでクレジットカードの登録・削除機能を実装する

#はじめに
個人アプリにて、クレジットカード決済を行うため、PAY.JPを導入しました。
導入において、少しつまずいた部分もあったので、備忘録として記載しています。

#前提条件
– Rails 5.2.4.2
– Ruby 2.5.1
– devise使用
– haml使用
– VSCode使用

#手順
1. PAY.JPの登録
2. アプリにPAY.JPを導入・下準備
3. モデルの作成
4. マイグレーションファイル
5. コントローラーの作成
6. gonの導入
7. JSファイルの作成

## PAY.JPの登録
以下のURLより登録します。
[PAY.JP](https://pay.jp/)

41b709e395800ed89184beb6bbfee74f.png

登録が完了すると、上記のよう

元記事を表示

Rails6+Reactで付箋アプリっぽいページを作ってみた。5(react-contenteditable導入編)

# 記事について
[前回](https://qiita.com/hanaitama-kaz/items/e82a9ec9538914861746)まででUIをそれっぽくしてみましたが、そろそろ付箋の中身を書き換えたくなってきました。
ということで、やってみます。

# 関連する記事
今までの記事です。
[その1(環境構築〜モデル作成編)](https://qiita.com/hanaitama-kaz/items/5b68b9c665f75020bcd4)
[その2(API作成編)](https://qiita.com/hanaitama-kaz/items/b461ff8564a5368523fc)
[その3(UI作成編1)](https://qiita.com/hanaitama-kaz/items/9b680c50566161046690)
[その4(UI作成編2)](https://qiita.com/hanaitama-kaz/items/e82a9ec9538914861746)
[その5(react-contenteditable導入編)](https://qiita.c

元記事を表示

Ruby on Railsのformについて

##最初に
formの使い方が曖昧だったので勉強致しました。
至る所で紹介されていることで、個人的なアウトプットですので、ご了承ください。

##formの使い分けについて
formは3種類が存在していますが、使い分けが曖昧でした。

・form_tag
モデルがない時に使用します。
使用例で言うと検索フォームです。

・form_for
データのモデルがある時に使用します。
使用例で言うと投稿フォームです。

・form_with
記述次第で「form_tag」と「form_for」の両方の使い方ができます。
現在のバージョンで推奨されている書き方です。

##form_tagの基本構文
form_tagを使うときは基本的にアクション属性とHTTPメソッドを指定します。

“`erb

<%= form_tag (action: :index, method: :post) do %>


<% end %>

元記事を表示

Rails Console内で関数を定義したい

ちょっとしたことなんですが。

[pryにコードをコピペするためにしておきたい設定#方法1:一つの式にしてしまう
](pryにコードをコピペするためにしておきたい設定)

括弧で括ると改行は無視されるようになります。
無視されるというか、閉じるまで式の途中とみなされます。

よく使うパターンとしては、Consoleが立ち上がってる間だけの関数を定義したいとき。
これはメソッドの一部を軽くテストしたいな〜ってときにやってます。

Console内で

“`ruby

[1] pry(main)> (
[1] pry(main)* def hoge
[1] pry(main)* return ‘hoge’ # 処理内容
[1] pry(main)* end
[1] pry(main)* )
=> :hoge

[2] pry(main)> hoge # 呼び出し
=> “hoge”

“`

という感じです。

元記事を表示

has_secure_passwordとは

#簡単に言うと?
安全性の高いパスワード機能を簡単に実装できるメソッド。
間違ったパスワードを入力させないように、二回パスワードを入力させるフォーム画面を作成するときに使える。

#何ができる?
has_secure_passwordを使うと以下の機能が使える様になる。

– ハッシュ化したパスワードをデータベース内のpassword_digestという属性に保存できるようになる。
– 2つのペアの仮想的な属性(passwordとpassword_confirmation)が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される 。
– 認証のために使うauthenticateメソッドが使えるようになる。authenticateメソッドとは、引数で受けとった文字列がオブジェクト内のpassword_digestと一致するか調べるためのメソッド。一致した時はそのオブジェクト自身を返し、不一致だとfalseを返す。

#どうやって使う?
1. テーブルのカラムに`password_digest`を導入する
2. Gemfileの`bcrypt`をコメントアウトし

元記事を表示

【gem:devise の日本語化】

# gem:devise日本語化の流れ

(deviseインストール後の流れ)

1. gemのインストール
・gem ‘devise-i18n’
・gem ‘devise-i18n-views’

2. コマンドで日本語翻訳ファイルを生成

3. devise.views.ja.yml を編集

## 1. gemのインストール

“`ruby
gem ‘devise-i18n’
gem ‘devise-i18n-views’
“`

gemfileに記述して“$ bundle install”します

## 2. コマンドで日本語翻訳ファイルを生成

“`
$ rails g devise:views:locale ja
“`
コマンドを実行すると日本語翻訳ファイルであるconfig/localesdevise.views.ja.yml
が生成されます。

## 3. devise.views.ja.yml を編集

生成されたconfig/localesdevise.views.ja.ymlを編集していきます。

“`ruby:config/localesdev

元記事を表示

【Rails】DateTimeで日付と時間を比較をする際の注意点

ことの起こりは深夜0時も回った頃。RSpecを走らせたところ、実装と関係のないところが落ちる。

調べてみたところ、どうやろ本当はreturnしないといけないところがreturnしていないようです。
してほしい挙動としては、「最後にツイートした日時が昨日より最近のときにreturnする」というもの。

“`rb
return if last_tweet.tweeted_at > DateTime.yesterday
“`

というわけで、調べてみました。

### 環境
Rails 5.2.4.2
Ruby 2.6.6

## デバッグ

“`pry
[2] pry(#)> DateTime.yesterday
=> Thu, 21 May 2020
“`

うんうん、合ってる。

“`pry
[3] pry(#)> DateTime.yesterday.to_time
=> 2020-05-21 00:00:00 +0900
“`

よかろう。

“`pry
[4] pry(#

元記事を表示

OTHERカテゴリの最新記事