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

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

Rails 6.0で”Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.”という警告が出たときの対処法

## はじめに

MySQLを使っている既存のRailsアプリケーションをRails 6.0にアップデートすると、次のような警告が出ることがあります。

“`
DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :name attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator.
“`

> (翻訳)
> 非推奨の警告: UniquenessバリデータはRails 6.1で「強制的に大文字小文字を区別する比較」をしなくなります。Userモデルの`:name`属性について引き続き「大文字小文字を区別する比較」を使い続けたい場合は、uniquenessバリデータに対して明示的に`case_sensiti

元記事を表示

Docker Composeを使った初期装備なRails6/PostgreSQL環境の作り方

Docker Composeを使ったRails環境を作る場合、[Quickstart: Compose and Rails \| Docker Documentation](https://docs.docker.com/compose/rails/)がとても参考になります。ただし、このドキュメントはRails5を前提として書かれており、現時点(2020-05-28)で最新のRails6を使う場合には一部修正が必要です。

そこでこの記事では、Rails6を使う場合について記載します。また、この記事の対象読者は下記を想定しており、環境構築は下記の方針と前提に基づいて行ないます。

**:family_mmgb: 想定読者**

– Rails環境構築でいつも躓くの方(丁寧めに説明します)
– 未来の自分(思い出せるように書きます)

**:telescope: 方針**

– [Quickstart: Compose and Rails \| Docker Documentation](https://docs.docker.com/compose/rails/)に準拠する(DBはP

元記事を表示

デイリードリル(CSRF)

# Question
Railsには、悪意のある攻撃に対してセキュリティを高める仕組みが様々用意されています。
CSRFとは何か。
またCSRFと呼ばれるサイトの成りすましによるクラッキングに対して、どのような対策が取られているか述べてください。

# Answer
## CSRFとは
Webアプリケーション利用者自身が意図しない処理が実行されてしまう脆弱性または攻撃手法のことをクロスサイトリクエストフォージェリ(CSRF)といいます。

## 被害例
– 利用者のアカウントによる物品の購入
– 利用者の退会処理
– 利用者のアカウントによる掲示板への書き込み
– 利用者のパスワードやメールアドレスが変更

※CSRF脆弱性の影響は「重要な処理」の悪用に限られるため、CSRFの脆弱性を個人情報の取得等に用いることはできません。

## 対策
rails では、ApplicationControllerにデフォルトで

“`ruby
protect_from_forgery with: :exception
“`

という記述がされています。これにより、アプリで作られたフォームに

元記事を表示

Rails テーブルにcommentを追加するマイグレーションファイル

## マイグレーションファイル
“`ruby
class AddCommmentsToStaffEmail < ActiveRecord::Migration[6.0] def change change_column_comment(:staff_emails, :employee_id, '業者ID') end end ``` ### change_column_comment change_column_commentにテーブル名、カラム名、コメント内容 を記載する ``` change_column_comment(:table_name, :column_name, 'contents') ``` ## 環境 - activerecord (6.0) ## 実行手順 マイグレーションファイル作成 **コマンド** ```cmd. $bundel exec rails g migration AddCommentsToTable ``` マイグレーションの実行 **コマンド** ```cmd. $bundel exec rake

元記事を表示

Railsのユーザー登録機能で登場する「password」と「password_confirmation」の正体【初学者】

オンラインプログラムスクール「TeacAcademy(テックアカデミー)」さんのWebアプリケーションコースを受講していますがTwitterクローンのユーザー登録機能を作っている時にフォームの部分にテーブルのカラムに追加していないはずの「password」と「password_confirmation」という2つの謎のカラム指定されており「なんじゃこれ」って調べてみたら答えがあっさり見つかった。

この「password」と「password_confirmation」という2つはユーザーカラムで記述していた「has_secure_password」に謎が隠されていました。

「password」と「password_confirmation」の2つが登場するまで「has_secure_password」はセキュリティ強化のためのおまじない程度にしか思ってなかったのですが当然のことながらかなり重要な役割を果たしていましたね。

主な役割は3つ

>①テーブルにパスワードを保存する時暗号化して保存。
②フォーム用に「password」と「password_confirmation」という

元記事を表示

Hello RSpec

新人のRailsエンジニアです。
RailsのTestをするにあたってRSpecを学んだのでまとめてみました。
100日後に1人前になるエンジニアを連載中です。本日は7日目
ちなみにMinitestとRSpecの比較については[こちら](https://qiita.com/akilax/items/93bf1137cc8832acb096)

##RSpecとは
RubyやRuby on Railsで作ったクラスやメソッドをテストするためのドメイン特化言語 (DSL)を使ったフレームワーク。
つまりは、テスト専用のプログラム言語とも言えます。

###FactoryBot
テスト用のデータの作成をサポートするgem
FactoryBotを利用するとテスト用のデータを簡単に準備できる
Rails標準ではFixtureという仕組みもありますが、
こちらよりもデータの状態やデータ間の関係性を掴みやすい。
ということで今回はこちらも使用。

###Capybara
WebアプリケーションのE2E(End-to-End)テスト用フレームワーク。
RSpecなどと組み合わせて使います。Webアプリ

元記事を表示

Active Record、複雑なクエリ

Active Recordでちょっと複雑な問い合わせを書いた時に、忘れないようにメモとして追記していきます。

## 関連テーブルのレコード数でソート
“`rb
class PLine < ApplicationRecord has_many :likes, dependent: :destroy end class Like < ApplicationRecord belongs_to :p_line end ``` ```rb @p_lines = PLine.select('p_lines.*', 'count(likes.id) AS favs') .left_joins(:likes) .group('p_lines.id') .order('favs desc') ``` ```erb <% @p_lines.each do |p_line| %>

<%= p_line.p_line %>

<%= p_line.favs %> points

元記事を表示

Cloudflareを使ってみた

## Cloudflareとは
DNS + CDN のサービスです。
オリジンサーバーとの間でリバースプロキシのように動作し、画像、CSS、JavaScriptなどをキャッシュしてくれます。

## 良いところ
– 無料
– 設定が簡単
– やらなきゃいけないことが少なく、情報が多い
– ルートドメイン(wwwなしのドメイン)でも問題なくCDNが使える
– 基本的にルートドメインはCNAMEレコードの設定ができないので、他のCDNサービスを使う時は設定が面倒なことが多い
– Cloudflareは`CNAME Flattening`という技術でルートドメインでもCNAMEレコードを設定することができる
– リダイレクトの設定が簡単
– wwwありなし、http→httpsなど
– 管理画面上で設定
– `.htaccess`に`RewriteEngine…`とか書かなくて良い

## 設定方法
Herokuで運用しているサイトに導入してみます。
基本的にこちらの記事に沿って設定を進めました。
[『Heroku + Cloudflare

元記事を表示

Shoryuken の worker を Rails console で実行

SQS への enqueue が何らかの AWS のサービスによるものだった場合、テストがしづらいことがあるので、 Rails console で叩いて動作確認できるようにする方法

name | version
—-|—-
shoryuken | 5.0.1
rails | 5.2.4.1
aws sdk core | 3.56.0
aws sdk sqs | 1.17.0

“`ruby
$ rails console
[1] pry(main)> worker = SomethingSqsWorker # please change
[2] pry(main)> body = {} # please change
[3] pry(main)> endpoint = “” # config などで設定
[4] pry(main)> client = Aws::SQS::Client.new(endpoint: endpoint)
[5] pry(main)> message = Shoryuken::Message.new(client, Shoryuken::Que

元記事を表示

% rails db:createするとmimemagic に起因するLoadErrorががが

“`terminal

% rails db:create
rails aborted!
LoadError: cannot load such file — mimemagic
/projects/〜〜〜/config/application.rb:7:in `


/projects/〜〜〜/Rakefile:4:in `

bin/rails:4:in `

“`
git hubからとあるファイルをcloneしdb:createをした際に生じたエラー

まいむまじっく…….???
なかなかマイナーなファイルが原因を引き起こしてるっぽいけども・・・

ひとりでは解決困難!!先輩の力を借りてる最中、Qiitaをみてみるとこんな記事が

a.com/zQmjRAb73seN5RM/items/5fa74d2a4d346cdd386e

バージョンの問題っぽい・・・?
その通りにコマンドを実行してみた

“`terminal
$gem list 〇〇
//〇〇には該当ファイルを入れる(今回だとmimemagic)
“`
結果は.

元記事を表示

railsでGoogleMapAPIの導入

## このページのコードでできること
・自分のrailsプロジェクトにGoogleMapを埋め込み、表示させる。
・ページを開いたら地図と、初期値のマーカーを表示させる。
・inputボックスと検索ボタンを用意。
・inputボックスに検索したい場所を入力し、検索ボタンを押すことでその場所の地図を表示。

## Maps JavaScript API & Geocoding APIの取得

これら記事にお世話になりました。(参考文献より)

[コードを書く前に]
(https://qiita.com/nagaseToya/items/e49977efb686ed05eadb)
[Google Maps API を使ってみた]
(https://qiita.com/Haruka-Ogawa/items/997401a2edcd20e61037)
[Google MAP 名称から場所を検索・特定する](https://qiita.com/yoshi_yast/items/521c1f36306a180f45dd)
[オリジナルアプリ作成 〜RailsでGoogleMap利用検証〜]
(h

元記事を表示

MySQLのモードに関して

# 自分のローカルで設定されているモード

“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
$ mysql -uroot -p
mysql> select @@global.sql_mode;
+——————————————————————————————————————————————————+
| @@global.sql_mode |
+——————-

元記事を表示

[Rails]collection_selectで都道府県プルダウンを作成する

# 前置き
他の記事を参考に導入してみましたが、これだけの手順で実装出来ました。
検索も出来たので、備忘録として残します。

# 前提条件
ransack導入済

# 1.導入
“`Gemfile
gem ‘active_hash’
“`
まずGemfileに上記のように記述し、bundle install。
再起動も忘れずに。

#2.prefectureモデルを作成
こちら手動です。

“`ruby:models/prefecture.rb
class Prefecture < ActiveHash::Base self.data = [ {id: 1, name: '北海道'}, {id: 2, name: '青森県'}, {id: 3, name: '岩手県'}, {id: 4, name: '宮城県'}, {id: 5, name: '秋田県'}, {id: 6, name: '山形県'}, {id: 7, name: '福島県'}, {id: 8, name: '茨城県'}, {id: 9, name: '栃木県'},

元記事を表示

本番画面での画像

## はじめに
開発環境で画像が表示されていましたが、本番環境では画像が表示されませんでした。
その時に行ったことを書いていきます!

## やったこと
①普通のイメージタグは
before

“`
= image_tag (“assets/xxx.png”)
“`
after

“`
= image_tag asset_path(“xxx.png”)
“`

②link_toとの併用
before

“`
= link_to image_tag(“/assets/xxx.png”), “ルートパス”
“`

after

“`
= link_to “ルートパス” do
= image_tag asset_path(“xxx.png”)
“`

③background-umageは
before

“`
background-image: url(“/assets/xxx.jpg”);
“`

after

“`
background-image: image-url(“/assets/xxx.jpg”);
“`

## 原因
開発環境ではimage

元記事を表示

【Rails】Railsのビューヘルパーのdate,timeとデータベースのdate型time型

## 概要
ビューヘルパーのdateやtimeの値をparamsから受け取ると次のようになっているため少し面倒だったという内容です。
合わせてこれをデータベースに格納したときのデータについても触れています。

“`html
# 月
# 時

OTHERカテゴリの最新記事