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

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

【jQuery】RailsでValidation Pluginを使った動的なバリデーションチェックの実装 〜詳細実装/Bootstrap編〜

# はじめに

[前回の記事](https://qiita.com/tiphp452/items/2ac12f7d95a230ef9d02)では導入編をまとめましたので本記事では詳細実装編をまとめます。後半では以下の場合についてもまとめています。

+ Bootstrapを使用している場合
+ deviseを使用している場合
+ 正規表現チェックメソッドのサンプル一覧

# 開発環境
Ruby 2.5.1
Rails 5.0.7.2
jQuery 3.4.1
jQuery Validation Plugin 1.19.1
Bootstrap 4.3.1

# 実装手順

入力フォームを実装済み、プラグインを導入済みであることを前提としています。

## パスワードと確認用パスワードのバリデーションチェック

### 完成イメージ
[![Image from Gyazo](https://i.gyazo.com/d36d27f39c5a2170c757e1d9867cbf61.gif)](https://gyazo.com/d36d27f39c5a2170c757e1d9867cbf61

元記事を表示

【Rails】 独自 Validation 作成方法(複数モデル適用)

# はじめに
バリデーションの作成方法はモデル内にprivateメソッドを作って、そのメソッドをvalidateの引数に指定する方法が一般的かと思います。
今回は、複数のモデルで同じバリデーションを適用したいケースへの対応方法をまとめました。

# 独自バリデーション作成方法
## やること

開始日時カラムと終了日時カラムを持ったモデルの入力フォームに、
どちらのカラムも入力するか、どちらのカラムも入力しないバリデーションをかけたい。

### Concern

まずは、“`app/models/concerns“`の直下にバリデーション専用のクラスを作成する。
Concernsを使用することで、同じカラムを持った他のモデルにも適用することができ、さらに細かい継承関係を考えなくてもよくなります。

“`Ruby:app/models/concerns/work_datetime_validation.rb
class WorkDatetimeValidation < ActiveModel::Validator # record には、インスタンスが入る def va

元記事を表示

Railsアプリ起動時に突然「Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)」になった時の対処法

## はじめに
Railsアプリをローカルで起動させた際に、MySQLのConnectionErrorが発生しました。先日まで問題なく起動していたのですが……。

スクリーンショット 2020-01-19 22.35.58.png

mysqlサーバーに接続する際、mysql.sockファイルを使って接続するらしいのですが、
なんらかの原因により、このファイルが消えることがあるそうです。
エラー文で指定されているところに、mysql.sockファイルを作成して再度接続してみました。

“`
$ sudo touch /tmp/mysql.sock
$ sudo mysql.server restart
Starting MySQL
. ERROR! The server quit without updatin

元記事を表示

Rails6 データベースのカラム作成を行う際の概要

# 目的

– カラムを作成したり削除したりする時の概要をまとめる

# 間違えてマイグレートしてしまった時はこちらを参考にロールバックを行う

[Rails6 マイグレーションファイルの記載ミスでマイグレートしてしまったらrollbackを使おう](https://qiita.com/miriwo/items/9fac9f5e6dffb7427f80)

# 作業概要(カラムを追加する)

1. カラムを追加するテーブル名を確認
1. 追加するカラム名と型を決定
1. マイグレーションファイルの作成
1. 追加カラム情報の記載
1. マイグレート

# 作業詳細(カラムを追加する)

1. カラムを追加するテーブル名を確認
1. これからカラムを追加するテーブル名を確認する。
1. 追加するカラム名と型を決定
1. 追加する任意のカラム名とデータ型を決める。
1. マイグレーションファイルの作成
1. 下記コマンドを実行してマイグレーションファイルの作成を行う。

“`terminal
$ cd Railsで作成したアプリのル

元記事を表示

Rubyではメソッドにreturnの記述要らない?

Railsで開発している際に既存コードにreturnが書かれていなかったり、returnを書いてrubocopに指摘されたりしたので調べました。
rubyでは不要であればreturnは書かない方針のようです。

## RubyではReturnの記述は不要
Rubyのメソッドでは、**最後に評価された値が返る**という仕様になっています。
例えば以下のような文字列を返すメソッドがあります。

“`ruby
def hoge(is_hoge)
if is_hoge
“hoge”
else
“fuga”
end
end
“`

最後に評価された値が返るので、それぞれ以下を返します。

“`ruby
hoge(true) # “hoge”

hoge(false) # “fuga”
“`

## 後置ifでは注意が必要

“`ruby
def hoge(is_hoge)
“fuga”
“hoge” if is_hoge
end
“`
“` ruby
hoge(true) # “hoge”

hoge(false) # nil
“`
なん

元記事を表示

Rails4系で統合テストをDocker環境内で行う

# はじめに
今回Railsのバージョンアップに向けて不足していた箇所のテストを書いていました。
その一環で統合テストを書こうとして軽く詰まったので似たような境遇方のためになればと思い(こんなレアケースに遭遇する人は少ないと思いますが)記事にしました。

# なぜ統合テストなのか
プロダクトで使用している外部サービスのAPIがjsにしか対応しておらず、プロダクト内で重要な機能の一部に組み込まれていたため。

# 環境
Rails 4系
Ruby 2.5.7
Rspec 3.9.1
capybara 3.30.0

# 対象
– すでにRspecのテスト環境が整っている。
– dockerを用いて開発を行なっている。
– dockerを用いていない場合はローカルにインストールされているブラウザを使用すれば簡単に実装できると思います。

# Railsアプリケーションが入っているコンテナにchromeなどを導入する
ブラウザ用にコンテナを分けるか迷いましたが、circleciにブラウザが導入されているRubyのイメージがあったため開発環境下でもRailsアプリケーションが入っている

元記事を表示

joinsで結合したモデルのscopeを使ってデータを取得する方法

inner joinかつ別モデルのscopeを利用してそのモデルの状態を条件にデータを取得したい。
例えば、「紐づくuserのstatusがtrueであるtweet」を取得したいときは以下のように書ける。

“`rb
Tweet.joins(:user).merge(User.available)
“`

user.rb

“`rb
class User < ApplicationRecord has_many :tweets scope :available, -> {
where(status: true)
}
end
“`
tweet.rb

“`rb
class Tweet < ApplicationRecord belongs_to :user end ```

元記事を表示

Rails Javascript/Html: 投稿編集画面で写真の表示を確認したい!

# = f.file_field :image, id: :message_img, placeholder: “写真の貼り付け:” 以下にJavaScriptを配置
:javascript 
$(function() {
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$(‘#img_prev’).attr(‘src’, e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$(“#message_img”).change(function(){
r

元記事を表示

Railsの思想

## はじめに
「パーフェクト Ruby on Rails」に Rails の特徴、強く打ち出している思想について始めのほうに記載されていたので「パーフェクト Ruby on Rails」を振り返り、メリットを知りたいと思いましたのでまとめます。

## CoC(Convention over Configuration)
直訳では「設定より規約」になります。有名です。
従来のアプリケーションフレームワークには規約がなく、開発者が自由に設定ができますが、Railsはファイル名の規約やテーブル定義の規約など様々な規約があります。

#### パーフェクト Ruby on Railsの例(そのままではないです)
– 社員情報を表現するモデルをEmployeeモデルとした場合、Railsで規約には則って開発することが求められる
– データベースのテーブル名はモデル名の複数形のEmployeesにする
– /employeesというURLは社員の一覧を表す
– /employees/1というURLは社員ID:1の社員情報を表す

### ✔️メリット
– 規約に則って記述することで、設

元記事を表示

Action Cableの設定でつまずいたこと

##行っていること
以下の記事や動画を参考にチャット機能を作成しています。
[Rails 5 + ActionCableで作る!シンプルなチャットアプリ(DHH氏のデモ動画より)](https://qiita.com/jnchito/items/aec75fab42804287d71b)
[0から手を動かして作るRailsチャットアプリ【チュートリアル】](https://www.youtube.com/watch?v=WCsgcp5dg7M)

リアルタイムでのチャット機能を作成する際につまずいたことを、記録も兼ねて共有します。

##やりたいこと
自分(current_user)と他の人で表示方法を変える
スクリーンショット 2020-01-24 17.56.47.png

##チャンネルの作成
“`
$

元記事を表示

【Rails】掲示板に禁止ワードを設定する

掲示板にクローラー的なやつがリンクやスクリプトを書き込み始めたので、暫定的な対応をしました。

“`comments_controller.rb
def create
#以下の4行で対応
prohibited_words = [‘a href=’, ‘.include?(p) }`で検証したい文字列に禁止ワードが含まれているかをチェックしています。

p.s.
掲示板荒らし対策に詳し

元記事を表示

リソースとは

#リソースについて調べたこと
・リソースとはWebページ上の全てのデータのことをいう。
・リソースには読み込むことしかできないものや削除や更新ができるものなど制限が付いているものもある。
例 ツイッターのアイコンや投稿など
#modelがリソース
railsのmodelはまさしくリソース(データ)で操作対象であるため、開発時には
1, model
2, Router
3,controller
4,view
の順で書いていくことを基本にして開発していく。慣れてきたら自分独自のやり方が見つかり変わるらしい。

元記事を表示

Railsチュートリアル 第5章

#ヘルパーメソッド
###link_to
リンクを生成するためのヘルパーメソッド

“`
<%= link_to "sample app", '#', id: "logo" %>
“`

第1引数:リンクテキスト
第2引数:URL
第3引数:オプションハッシュ(必須ではない)

###image_tag
画像を表示するためのimgタグを作成するヘルパーメソッド。

“`
image_tag(“rails.png”, alt: “Rails logo”)
“`

第1引数:画像ファイル名
    ファイルの置き場所は「app/assets/images」フォルダと「public」フォルダの2つが用意されている。
上記の様に指定すると、「app/assets/images」が参照される。
    **「public」フォルダを参照したい場合は、ファイル名の前に「/」を入れる。**
第2引数:オプション
   alt:画像がない場合に代わりに表示される文字列
   size:’100×200′ 幅と高さを指定

“`
<%= link_to image_tag("rails.png

元記事を表示

Railsのテンプレファイル(html.erb)でのコメント方法

一度うまくいった記述を、きれいなコードにする際にコメントアウトして残す癖があるが、html.erbファイルでのコメント方法が分からず調べたため備忘録として。

1. `<%#= %>`もしくは`<%# %>`で囲む

“`
<%# ココはコメントアウトされる %>
<%#= ココはコメントアウトされる %>
“`
複数行の場合は

“`
<%# ココは コメントアウト される %>
“`
 
2. `<% if false %>` `<% end %>`で囲む
できるっちゃできますが、コメントアウトというより正しくはデッドロジック作っているので、やはり無理やり感ありますね。

“`
<% if false %>
ココはコメントアウトされる
<% end %>
“`

### その他
なお、他にも、複数行コメントとして、`<% begin %>`と`<% end >%`で囲むという方法も見つかりましたが、上記1.ほどシンプルでなく改行によってはうまく機能しなかったりするので、通常使うにはイマイチということで、記載していません。

## 参考
– https://stack

元記事を表示

あっさり読むrails 番外(image)

#はじめに
[以前の記事](https://qiita.com/Moon1126Snow/items/a4aaae5f290c3e223684)の応用で、画像アドレスをフォームに入力すると、自動的に画像が表示されるようにします。
#前提
前記事をそのまま修正します。
#実行
ビューファイルを次の様に修正します。

“`haml:sample.haml.html
= form_with model:@sample, local: true do |f|
= f.text_area :name, placeholder: “サンプル”, class: “sample-form”

.add-image
“`
`add-text`を`add-image`に変えただけです。

JSファイルを次の様に書きます。

“`javascript:sample.js
$(function(){
$(“.sample-form”).on(“change” functon(){
var image = $(this).val();
let html = `

元記事を表示

メモ:ActionMailerのログにメールアドレスが出ないようにする

この記事は
===

* 意外とぱっとできなかったので個人メモです

やりたかった事
===

* ActionMailerでメールを送信する際に、下記のようにログにメールアドレスが出てしまうのですが、セキュリティのレギュレーション上、これを止めたかったです

“`
INFO — : [ActiveJob] [ActionMailer::DeliveryJob] Sent mail to test@example.com (95.4ms)
“`

やり方
===

* Rails側で設定はできません
* [モンキーパッチあてればいい説](https://stackoverflow.com/questions/16270713/filter-out-email-addresses-from-actionmailer-logs)があり、やってみたのですが、これが全く反映されない
* 結局、下記のようにLogSubscriberのサブクラスを作って、ActionMailerが読み込まれたあとでattachしなおしたら反映されました

“`config/initializers/log

元記事を表示

rails install で詰まった話

## 結論この記事を参考にしたら解決

https://qiita.com/amuyikam/items/313bc89c1de320a4257e

こんなエラーが

“`
➜ ~ gem install rails
ERROR: Error installing rails:
zeitwerk requires Ruby version >= 2.4.4.
“`

rubyのバージョンが古かった。

“`ruby
➜ ~ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin18]
“`

この記事を参考にrubyのバージョンを 2.4以上にする

https://qiita.com/TAByasu/items/47c6cfbeeafad39eda07

ダメか

“`
➜ ~ rails new sample
Rails is not currently installed on this system. To get the latest version, simply type

元記事を表示

ミニQ & Aサービスの開発

Udemyの教材でミニQ&Aサービスの開発について学んだので、備忘録として記録します。
教材:[https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/)

## Rubyのバージョン管理

今回はバージョン2.5.1で進めました。

“`terminal:ターミナル
$ rvm -v #rvmのバージョンを調べる
$ rvm 1.29.8 (1.29.8) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

$ rvm list
=* ruby-2.5.1 [ x86_64 ]
ruby-2.6.3 [ x86_64 ]

# => – current
# =* – current && default
# * – default

$ rvm install 2.5.1 #バージョン

元記事を表示

【解決策】formにカラムが設定されない!?

Webアプリを開発していて、routesとcontroller、viewを何度も見直したのにformを検証で見てみると何故かカラムが設定されない時に以下の方法で解決しました。

#before
= form_with model: @message, url: job_messages_path(@job), local: true do |f|
= f.text_field :text
#after
= form_with model: @message, url: job_messages_path(@job), local: true do |f|
= f.text_field :text, name: “message[text]”

下の行に、name:”テーブル名[カラム名]”を書き足せばカラムが設定され、値を入れることができました!!

元記事を表示

Active Storage + S3を使うときに気をつけること

__備忘録なので無視してください__

“file_field“で写真をアップする時に“direct_upload“を設定しないと“No route matches“になる時がある。

“`slim
= f.file_field :image, direct_upload: true
“`

元記事を表示

OTHERカテゴリの最新記事