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

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

Dockerを使った開発環境でページネーション機能を作る

# {dockerを使った開発環境でページネーション機能}

今回は有名なgem であるkaminariを使ってページネーション機能を実装する。

## 記事の対象者
・Dockerの環境構築が出来る方
・ページネーション機能を一から知りたい方

###ページネーション機能 とは??
ページネーション機能とは、大量のデータをviewで表示する際に、全部表示するのではなくページごとに分けて表示する方法である。

## 開発環境
Rails 5.0.0.1
bootstrap 4.0.0
今回はbootstrapを導入し、Dockerの環境構築が済んでいる状態を想定する。

## デモ
###1. gemをインストール

Gemfile内に“`gem ‘kaminari’“`と記述する。
その後以下のコマンドを実行する。

“`
$ docker-compose build
$ docker-compose up -d
“`

“`$ docker-compose build“`はgemのインストールやdockerのimageを実行するときに使う。
“`$ docke

元記事を表示

データベースの理解 ~with ruby on rails

# データベースとは?
Wikipediaを参照すると、データベース=「検索や蓄積が容易にできるよう整理された情
報の集まり」と書いてある。Excelの二次元の表のイメージで良いと思う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614347/f6a30ef7-72e7-4b15-812d-6d5e29ea79cd.png)

成績一覧のようなデータは、上記の表のように書くのが最も見やすいだろう。番号を付けて並べていて、それぞれの人の成績が一目で理解できる。一つのセル(マス)には一つの情報のみ入っている。歌手とcdを並べたデータや、顧客データ、財務データ、色々な場面でこのような表を作る必要性が出てくる。しかし、データベースは分かりにくいという声がある。これは、データベースは単体を指すのではなく、多くの場合は複数の表が互いに関係しあった関係データベースを扱うためである。

関係データベースという名前は、エドガー・F・コッドという計算機学者が考案し、現在最も広く使われているという。そもそ

元記事を表示

【Rails】carrierwaveとAWS S3とHerokuで画像をアップロード

画像アップロードに苦戦したいい思い出が掘り起こされたので備忘録的にメモ

「Railsアプリケーションで画像アップロードをしたいけど方法がわからない…」
「ローカル環境ではうまく動いたのに本番環境だとなぜか表示されない…」  
「せっかくだしAWSを使って画像をホストしてみたい…」
という方向けです(主に自分がそうでした)

##手順
①gemを用意
②carrierwaveを使って画像アップローダーの準備
③画像の保存先を開発環境と本番環境でそれぞれ設定
④AWS S3の設定
⑤viewファイルにイメージタグを設置
⑥Heroku用に色々設定する

##①gemを用意
“`
gem ‘carrierwave’ #画像アップローダーを設置するためのgem
gem ‘fog-aws’ #AWS S3用gem
gem ‘dotenv-rails’ #S3へのアクセスキーを環境変数として保存させる
“`

`$ bundle install`しましょう。

##②画像アップローダー準備

“`
$ rails g uploader Image   #アップローダー名

元記事を表示

Rails バリデーションエラーメッセージの日本語化

### はじめに
Railsのバリデーションエラーメッセージは、デフォルトのままだと英語で表示されてしまう。
そこで、メッセージを日本語で表示できるように修正をしていく。

以下の記事を参考にした。

[Railsのバリデーションエラーのメッセージの日本語化](https://qiita.com/Ushinji/items/242bfba84df7a5a67d5b)

### gemの追加
以下のライブラリを追加する。

“`erb:Gemfile
gem ‘rails-i18n’
“`

### ファイルに追記

以下のコードを設定ファイルに追記。

“`erb:config/application.rb
config.i18n.default_locale = :ja
“`

### カラム名を日本語表記にする

“`erb:config/locales/models/ja.yml
ja:
activerecord:
models:
picture_detail: 詳細画像
attributes:
picture_detai

元記事を表示

data_fieldで過去日付の登録を防ぐ方法(Rails)

#はじめに
Railsでformを使ってデータを登録する事は非常に多いと思います。その中で日付を登録する事も多いと思いますが、ユーザーに過去の日付を登録させたくないケースがあるかと思います。
今回はその対処方法を紹介します。

#環境
– Rails:5.0.7
– Ruby:2.5.1

#前提
自分が開発している予約アプリを例にしています。reservationモデルのreceivedate(受取日)に制限をかけます。カラム型はdataです。

#ソースコード(form)
“`:haml(html)
=form_for [@user, @reservation], url:{ action: :confirm } do |f|
.document-group-form__field
.document-group-form__field–left
= f.label :receivedate, ‘受取希望日’, class: ‘document-group-form__label’
.document-group-form__field

元記事を表示

長い文字列をカラムに入れて保存しようとするとどうなるか

環境: Rails 6.0、PostgreSQL 12.2、MySQL 5.7

## ActiveRecord::ValueTooLong

テーブルにレコードを保存するとき、255文字のように長さに制限があるカラムに300文字の文字列を指定して保存しようとするとどうなるでしょう。

こういうテーブルがあって(MySQL)、

“`text
+————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+———+—————-+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NUL

元記事を表示

【rails】production環境でバッチ処理の環境読み込みがdevelopmentになってしまうときの対処法

#実行環境
AWS EC2+RDS
Rails 5.2.4.2
Ruby 2.7

#経緯
自動でメール送るバッチ処理を本番環境で行うために、
rakeファイルにタスクを書いた状態で

`$ bundle exec whenever RAILS_ENV=production`
(自動化の設定ファイルの実行コマンド)
を実行し、

`$ bundle exec whenever –update-crontab RAILS_ENV=production`
(crontabへの書き込みコマンド)
を実行しました。

その後、タスクの挙動を
`$ tail -f log/cron.log`で見てみると
エラーが発生していた。

#エラー内容
rake aborted!
ActiveRecord::StatementInvalid: Could not find table ‘テーブル名’

#原因
`$ bundle exec whenever RAILS_ENV=production`
実行後のターミナルでの表示が以下のようになっていました。

“`
* * * * /bin/bash

元記事を表示

素人がWebサービスを作る備忘録(実装編)3

#はじめに
この記事は初めてwebサービスを作る人間のアウトプットも兼ねた備忘録です。その為、何か問題点があった場合は遠慮なく仰ってください。現時点はrails tutorialのアウトプットが中心です。一通り終わった後にいろいろな機能を追加していこうと思っております。
#カスタムヘルパー
railsは多くの組み込み関数を使用している。(関数とは与えられた引数を元に何らかの処理を行いその結果を返すもの)この___組み込み関数を自分で作ることができるがこのことをカスタムヘルパーという。___

“`ruby:application_helper.rb
module ApplicationHelper

def full_title(page_title = ”) #とりあえずタイトルは空がデフォでprovideで指定したらいれる
base_title = “Ruby on Rails Tutorial Sample App”
if page_title.empty? #空のままだったらbase_titleを返す
base_title
else

元記事を表示

webページHTMLから簡単に配列は作れないものか?というあなた

##はじめに
こんにちは初めてキータ記事を投稿するものです。誤字脱字には目をつぶっていただけたら嬉しいです。
私が最近通っている某プログラミングスクールで習ったancestryジェムを個人アプリで使ってみようかなと思ったのですが、欲しいデータを様々なワードでググってみても出てこない(当然ですが)、そこで置換機能を使ってwebページからデータを整形して使ってしまおうということでいろいろ勉強したことを記事にしようと思います。

#webページからデータを所得して配列を作る
私の場合は業界のカテゴリーを作りたかったので業界動向serch.comさんを参照させてもらいました(https://gyokai-search.com/2nd-genre.htm)

2fb4da334f942a3b460f3a34daad80fd.pngローカル環境と本番環境のマイグレーションファイルの違いでハマった話

# 初めに
今回が初投稿になります!

今までQiitaで他の方の記事を参考に勉強させてもらっていたので、
調べる中で解決に時間がかかった物をメモとして残したいと思います!

まだまだ未熟者なので、記事の内容に誤りがあるかもしれませんがご了承ください?‍♂️

## ハマった内容
AWSにてデプロイを行い、自動デプロイの設定まで完了していました。
いざ、開発環境での変更内容内容を本番環境に反映させよう!と思い、
自動デプロイ実行!!!

すると、
![s3.ap-northeast-1.amazonaws.com_0_453605_fa8fee9a-0ed0-13c8-608f-1b1872b4f023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617337/eb9a7766-52fb-c1cc-f7f8-a5edb310a206.png)

エラーか、、、、、

とりあえず、以下のファイルを変更し、エラー文を表示させました。

“`ruby:/config/environments/produ

元記事を表示

Ruby on Railsのチュートリアル ~第4章Rails風味のRuby~

# はじめに
webアプリケーションを作るための学習記録
(マッチングアプリを作る予定)

こちらのチュートリアルを片っ端から進めていく
【Ruby on Rails チュートリアル】
https://railstutorial.jp/

# 第4章Rails風味のRuby
## まとめ
– Rubyは文字列を扱うためのメソッドを多数持っている
– Rubyの世界では、すべてがオブジェクトである
– Rubyではdefというキーワードを使ってメソッドを定義する
– Rubyではclassというキーワードを使ってクラスを定義する
– Railsのビューでは、静的HTMLの他にERB (埋め込みRuby: Embedded RuBy) も使える
– Rubyの組み込みクラスには配列、範囲、ハッシュなどがある
– Rubyのブロックは (他の似た機能と比べ) 柔軟な機能で、添え字を使ったデータ構造よりも自然にイテレーションができる
– シンボルとはラベルである。追加的な構造を持たない (代入などができない) 文字列みたいなもの
– Rubyではクラスを継承できる
– Rubyでは組み込みクラ

元記事を表示

【Rails】テーブルにカラムを追加する方法

こんにちは。YASUです。

今回はRailsにてテーブルにカラムを追加するやり方をまとめたいと思います。
前提として既にテーブルが用意されており、そこにカラムを追加していきます。

では早速いきます。

まずテーブルにカラムを追加したり削除したりするのにマイグレーションファイルを作成しなくてはなりません。
なので作ります。

“`ruby:
ec2-user:~/environment/booksreview (master) $ rails g migration AddStoryToReviews
“`

実行したら新しくマイグレーションファイルが生成されるので編集する。
今回は、2つテキスト型でstory,actionplanを追加。

“`ruby:20200411061306_add_story_to_reviews.rb
class AddStoryToReviews < ActiveRecord::Migration[5.2] def change add_column :reviews, :story, :text add_column

元記事を表示

Rails 爆速でSNSシェアボタンを実装してみよう

# 今日の目標
twitterやfacebookやLNEで自分のサイトをシェア出来るようにしよう!

今日実装してみるのは下の画像の赤枠の部分です

[![Image from Gyazo](https://i.gyazo.com/02181397335d29ea39ad1214905abe5c.png)](https://gyazo.com/02181397335d29ea39ad1214905abe5c)

例えば twitterのアイコンをクリックすると

[![Image from Gyazo](https://i.gyazo.com/7e27d397ea5eb97b1ffa4353d37a95b6.png)](https://gyazo.com/7e27d397ea5eb97b1ffa4353d37a95b6)

このように シェアしたいページをtwitterで投稿することができます。

##爆速でこのシェア機能を実装してみましょう

# twitterバージョン
[Twitter 開発者 ドキュメント日本語訳](http://westplain.sakuraweb.com/

元記事を表示

Basic認証とは

##Basic認証
Basic認証とは、HTTP通信の規格に備え付けられているユーザー認証の仕組みです。
サーバーと通信が可能なユーザーとパスワードをあらかじめ設定しておき、それを知っているユーザーのみがWebアプリーションを利用できるようにすることができます。
※Ruby on Railsには、Basic認証を導入するためのメソッドが用意されており、簡単に実装できます。
### authenticate_or_request_with_http_basic
Ruby on RailsでBasic認証を実装するためのメソッドです。
ブロックを開き、ブロック内部でusernameとpasswordを設定することでBasic認証を利用できます。
サンプル

“`
# ‘admin’というユーザー名と、’password’というパスワードでBasic認証できるように設定
authenticate_or_request_with_http_basic do |username, password|
username == ‘admin’ && password == ‘password’

元記事を表示

#Rails の preload では関連先テーブルの絞り込みはできず、eager_loadでは可能 ( joins / includes の違いや merge の作用を知りたい )

“`rb
# preload では 自分からの検索は可能
users = User.where(id: [1,2,3,4,5]).preload(:books)

# preload では 関連先のテーブルからの検索は不可能
users = User.preload(:books).where(books: { name: “Alice Wonder Land” }).first
# ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column …

# preload + joins で関連先のテーブルからの検索が可能だが、 join の作用で 関連先テーブルの数だけ返ってくる結果数も多くなる
# 同じUserのインスタンスが大量に返ってきたり
# merge でも where でも書けるが、どちらでも挙動は変わらないっぽい?
users = User.joins(:books).preload(:books).where(books: { name: “Alice Wonder Land” })
users =

元記事を表示

使えるコードレビューツール

##コードレビューツール
コードレビューツールとは、文法・バグ・コーディングスタイルを自動で分析するツールです。
代表的なものとしてRubocop、ESlintなどがあります。
##Eslint
EslintはJavascriptの静的コード解析ツールです。Javascriptで書かれたコードを解析し、明らかなバグ・不適切なコーディングスタイルを指摘してくれます。
参考サイト
[Eslint公式(英語)](https://eslint.org/)
##Rubocop(ルボコップ)
RubocopはRubyの静的コード解析ツールです。「インデントが揃っていない」 「無駄な改行・スペースがある」などの指摘をRubyStyleGuideに基づいて行ってくれます。
###Rubocopの導入
Gemfile

“`
#省略
group :development do
gem ‘web-console’, ‘>= 3.3.0’
#省略
gem ‘bullet’
gem ‘rubocop’, require: false #追加
end
#省略
“`
ターミナル

“`
$b

元記事を表示

Rails チュートリアル 9.31: 永続的セッションのテスト

個人的にわかりづらいと思ったのでテストを付け足し。

“`ruby
test “current_user returns nil when remember digest is wrong” do
@user.update_attribute(:remember_digest, User.digest(User.new_token))
assert_nil current_user
end

“`

update_attributeでremember_digestを変更したらそりゃfalseになるよね、
remember_digestが一致しないんだからnilが返ってくるよねって話。

“`ruby

test “current_user returns nil when remember digest is wrong” do
assert @user.authenticated?(@user.remember_token)
@user.update_attribute(:remember_digest, User.digest(

元記事を表示

【Rails】seedファイル使い方

#はじめに
学習中の備忘録です。

#概要
* 通常のデータ登録
* ancestryを使用した際のデータ登録

#前提
Rails 5.2.4.2

#通常のデータ登録
今回は格言をランダムで表示する為に、messageテーブルにcontent,author,descriptionを登録する。

“`ruby:seeds.rb
Message.create([{content: “自分自身を信じて~”, author: “ゲーテ”, description: “ドイツの詩人”},
{content: “たいていの人は~”, author: “バーバラ・ブラハム”, description: “米国の女性ビジネスコンサルタント”},
#~省略~
{content: “人間のほほえみ~”, author: “マザー・テレサ”, description: “カトリック教会の修道女、ノーベル平和賞受賞”}
])
“`
rails db:seedを実行

“`:ターミナル
% rails db:seed
“`
seed後のmessageテーブル

元記事を表示

【Rails】はじめてのSystemSpec(RSpec)

# はじめに

RSpec(テスティングフレームワーク)を使用してSystem Testを行います。
尚、RSpecではSystem TestのことをSystem Specと呼びます。

System Specを書いたことがない人でも書けるように初歩的な
**WebアプリケーションにおけるユーザーCRUD関連**
をテストします。

この記事はテストのみの記事ですので前提条件があります。

# 前提条件

ユーザーの新規作成、編集、ができて、ログインログアウトができて、ログイン時、非ログイン時で機能の使い分けができればOKです。

筆者はユーザー認証にSorceryを使用していますが、Deviseでもgemを使用していなくてもユーザー認証ができればテストは可能です。

>
①ユーザー(User)の新規作成と編集機能が実装済
②ユーザー認証(ログイン、ログアウト)機能が実装済
③非ログイン時は、ユーザーの新規作成とログインのみが機能として使える

# 環境
## 各バージョン

`Ruby 2.6.5`
`Rails 5.2.3`
`My

元記事を表示

Ransackを利用した検索フォームの作成方法

# Ransackとは?
[公式リファレンス](https://github.com/activerecord-hackery/ransack)に
>Ransack enables the creation of both simple and advanced search forms for your Ruby on Rails application

とある通り、Ransackとは**Ruby on Railsを用いて開発しているアプリケーションに検索フォームを作成するためのGem**です。

## Ransackのインストール
Gemfileに`gem ‘ransack’`と追記して`$bundle install`。以上です!

#Ransackの使い方
本記事では、私がRansackを勉強する際に作成した[こちらの簡単なアプリ](https://github.com/yohei222/ransack_practice)で、Ransackを使っている箇所を中心に説明していきます。
*Ransack以外の説明が少ないため、全体像を掴みたい場合は[ソースコード](https:/

元記事を表示

OTHERカテゴリの最新記事