- 1. Rails 6.0で”Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.”という警告が出たときの対処法
- 2. Docker Composeを使った初期装備なRails6/PostgreSQL環境の作り方
- 3. デイリードリル(CSRF)
- 4. Rails テーブルにcommentを追加するマイグレーションファイル
- 5. Railsのユーザー登録機能で登場する「password」と「password_confirmation」の正体【初学者】
- 6. Hello RSpec
- 7. Active Record、複雑なクエリ
- 8. Cloudflareを使ってみた
- 9. Shoryuken の worker を Rails console で実行
- 10. % rails db:createするとmimemagic に起因するLoadErrorががが
- 11. railsでGoogleMapAPIの導入
- 12. MySQLのモードに関して
- 13. [Rails]collection_selectで都道府県プルダウンを作成する
- 14. 本番画面での画像
- 15. 【Rails】Railsのビューヘルパーのdate,timeとデータベースのdate型time型
- 16. 自作ポートフォリオを掲げて、Web系自社開発企業に転職したいと考えている人へ
- 17. 【Rails】フォームのエラーメッセージを入力項目ごとに表示する
- 18. 【Rails】一つのメソッドをf.selectのオプションとバリデーションで使い回す
- 19. ec2デプロイ、unicorn.logのエラーActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessageの解決法
- 20. EC2デプロイの際のエラーActiveRecord::AdapterNotSpecified: The `production` database is not configured for the `production` environment.
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
## データの取り出し方
dateやtimeは次のように一つを指定しないと取り出すことができません。
パラメーター名に[:date]のように指定してしまうとnilが返ってきます。通常
“`zsh
params[:パラメーター名]
params[:
自作ポートフォリオを掲げて、Web系自社開発企業に転職したいと考えている人へ
# ターゲット
自作ポートフォリオを掲げて、Web系自社開発企業に転職したいと考えている人# 結論
### トピック1の結論
転職までの最短経路を十分に考え、場合によっては何も掲げずに転職活動すべし。### トピック2の結論
ほぼ未経験からのスタートなら、プログラミングスクールに通うべし。# 話すトピック
1. 友人の転職に心がざわついた
2. 自力でポートフォリオを作成するときの罠# 友人の転職に心がざわついた
先日(2020年5月26日)、大学時代の友人から転職したと連絡がありました。本来ならおめでとうの言葉が先に出るべきなのでしょうが、現在転職のためにポートフォリオを作成している身ですから、なんとも複雑なわけでした。悲しい・虚しい、、、うーん。この複雑な気持ちの正体を知れば、自分のことをもっと理解できるかもしれない。そんな風に思い、色々思考を巡らせました。
感情の正体は、
`3ヶ月で有名企業から内定を獲得した友人と、仕事以外の大半の時間を使用して、半年かかっても現職から離れられないでいる自分に、圧倒的な差を感じ、なんともやるせない気持ちになった`ということ
【Rails】フォームのエラーメッセージを入力項目ごとに表示する
## 実現したいこと
次の画像のようにフォームにある入力項目一つ一つに対してエラーメッセージを表示させます。
localesでの日本語化もしていますが、こちらのインストールなどについてはカバーしていないので知りたい場合は参考のURLなどから確認してください。
## 環境
ruby: 2.7.1
rails: 6.0.2.2## コード
### エラーメッセージ表示のパーシャルを作成
modelとattributeを変数にすることで使いまわせるようにしています。
errors.full_messages_forを利用して入力項目に対応したエラーメッセージのみを表示します。
/app/views/layouts/_error_messag
【Rails】一つのメソッドをf.selectのオプションとバリデーションで使い回す
## 前置き
erbのセレクトボックス一つ一つにオプションの値を書いていると、見落としや編集の手間を感じたので1箇所に集めようと思った。
初めはhelperを使用していたが、同じ配列がバリデーションでも流用できるのではと思い今回の形になりました。しかし、セキュリティの側面からみた場合、バリデーションで同じメソッドの値を使い回すこのやり方はどうなのか?という疑問が残ります。
また、バリデーションで流用するためにmodelにメソッドを定義しましたが、viewで表示するデータの作成は本来のmodelの役割ではない部分も意識する必要がありそうです。## 環境
ruby: 2.7.1
rails: 6.0.2.2## コード
### model
“`ruby
class Log < ApplicationRecord # クラスメソッドの定義 class << self def selectBoxOptions(key) if key == "fruits" return [ "なし", "りんご", "いちご"] e
ec2デプロイ、unicorn.logのエラーActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessageの解決法
これを試す。
https://qiita.com/shota0701nemoto/items/2a7f5556803926c33d45#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E5%90%88%E8%A8%884%E3%81%A4%E3%81%AEmasterkeycredentialsymlenc%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E7%B4%90%E3%81%A5%E3%81%91%E3%82%8B%E6%89%8B%E9%A0%86
EC2デプロイの際のエラーActiveRecord::AdapterNotSpecified: The `production` database is not configured for the `production` environment.
database.ymlに何らかの記述ミスが起こっている。