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

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

【jQuery】RailsでValidation Pluginを使った動的なバリデーションチェックの実装その1

# はじめに
本記事がQiitaでの初投稿となります。
プログラミングスクールで開発中のECサイトアプリでjQueryのプラグインを使って
動的なバリデーションチェック機能を実装しました。
実装手順とRailsで使用する場合の注意点をシェアします。

# 開発環境
Ruby 2.5.1
Rails 5.0.7.2
jQuery 3.4.1
jQuery Validation Plugin 1.19.1
Haml 5.1.2
Sass 3.7.4

# jQuery Validation Pluginとは
jQuery Validation Pluginはバリデーションチェックが実装できるjQueryのプラグインです。

公式サイト:https://jqueryvalidation.org/

# やりたいこと
+ 入力フォームにユーザー情報を入力する際にリアルタイムにバリデーションをチェック
+ バリデーションエラーがある場合はエラーをリアルタイムに表示
+ バリデーションがNGの場合は入力欄が赤色、OKの場合は緑色に変更

# なぜjQuery Validation Pluginを選

元記事を表示

【Rails】Rspec何言ってるか解読してみた件。コントローラー#new編

今回は、**写真とタイトルを投稿するアプリケーションのtweetsコントローラーのnewアクション(新規ツイート投稿画面を呼ぶ)が問題なく動くかどうか、Rspecという言語を使って**テストコードを記述。

spec/controllers/tweets_controller_spec.rbに、**擬似的にnewアクションを起こすリクエストを飛ばして、ちゃんとnewアクションに対応したビューが返ってくるかな?**というテストコードを記述。

コントローラーのテストをする際は、2つの点に注意。
①tweets_controller.rbに、テストしたいアクションに対して、before_actionが定義されていないこと。
②gem ‘rails-controller-testing’をインストールしよう。

では、見てきましょう。

“`ruby:tweets_controller_spec.rb
require ‘rails_helper’

describe TweetsController, type: :controller do
describe ‘GET #new’ d

元記事を表示

[Rails]rails sを実行した際のPG::ConnectionBadの対処法

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#rails sを実行すると画像のようなエラー画面になります
9b14f558d5741ade85174b2f5f175e78.png

この様な場合は、PostgreSQLサーバーが起動していない事が原因の様です。
[PG::ConnectionBad の対処法 – Qiita](https://qiita.com/ho_soft/items/c8a2cbf087016b7a712b/)

ただ、macの場合は、以下のコマンドは使えないので

“`apache
$ sudo service postgresql

元記事を表示

Google Cloud Vision APIを使って、食品パッケージ画像からテキストを非同期で読み取りフォームに記載してみる

# 概要
ポートフォリオでGoogle Cloud Vision APIを使ってみたので紹介したいと思います。
ちなみに食品パッケージのサンプルは世界一おいしいアマタケのサラダチキン(ピザ味)を使用してます

[![Image from Gyazo](https://i.gyazo.com/66aa4bbbf4cbd8d892cdb26c6c77ce3a.gif)](https://gyazo.com/66aa4bbbf4cbd8d892cdb26c6c77ce3a)

# 詳細
## 下準備
詳細は省きますが、Cloud Vision API を利用するため GCP のサービスアカウントの json ファイルをダウンロードします。gem ‘google-cloud-vision’も bundle installしてください。keyファイルのPathはcredentials.yml.encで管理しました。
(時間が空いたときに詳細手順を記載します…)
[参考:RailsにGoogle Cloud Vision APIを導入し、簡単に過激な画像を検知する
](https://qi

元記事を表示

【Rails】CSVを取り込み、計算し、画面に出力

運営しているシステムの大幅回収にあたり、DBを移行しました。

その際あるテーブルのIDが連番になっていなかった部分を1から連番にしたのですが、関連するテーブル(1対多)のIDを1つずつ手動で変更するには量が膨大すぎたので、IDの値を簡単に変更するためのプログラムを組んだので内容を記録します。

##プログラムの内容
・webページ上でCSVファイルをアップロード
・受け取ったファイルの各行1列目(一番左の項目)を配列に保存する
・数値を確認し、値ごとに計算を行う(42~117の間の数値だった場合-10、など)
・計算後の数値を画面に出力

画面に出力された数値をコピペすることで、手元のCSVのIDを一括で修正することが出来ます。

##実装
“`app/controllers/csv_controller.rb
class CsvController < ApplicationController require "csv" def input; end def output file = params[:file] @a = Array.new

元記事を表示

Rails6 開発中のアプリに機能追加をしよう

# 目的

– Railsアプリに機能追加する時の筆者の手法をまとめる

# 実施方法概要

1. 機能追加用ブランチの作成
1. 機能追加を実施
1. テスト
1. 機能追加ブランチへの登録
1. 機能追加ブランチをmasterブランチへmerge

# 実施方法詳細

1. 機能追加用ブランチの作成
1. 下記コマンドを実行してブランチを作成、機能追加ブランチへ移動する。

“`terminal
$ cd railsアプリのルートディレクトリ
$ git branch 任意のブランチ名
$ git checkout 任意のブランチ名(前述の物と同じもの)
“`

1. 機能追加を実施
1. 追加したい機能をコーディングなどを行い追加する。
1. テスト
1. 追加した機能が正常に動作するかブラウザでの簡単なテストを行う。
1. 機能追加ブランチへの登録
1. 下記コマンドを実行して追加した機能用のコードをgitに登録する。

“`terminal

元記事を表示

github actions rspec

### 成果物

“`yml:.github/workflows/ruby.yml
name: Ruby

on: [push]

jobs:
build:

runs-on: ubuntu-latest

services:
postgres:
image: postgres:10.3
ports: [“5432:5432”]
options: –health-cmd pg_isready –health-interval 10s –health-timeout 5s –health-retries 5
steps:
– uses: actions/checkout@v1
– name: Set up Ruby 2.5
uses: actions/setup-ruby@v1
with:
ruby-version: 2.5
– name: Install PostgreSQL client
run: |

元記事を表示

Rack入門 Rack Middleware編 (3/3)

[前回](https://qiita.com/nishio-dens/items/852d7604b34d20514a70) は、Rackのプロトコルを理解するために簡単なアプリを作りました。
今回はRackの重要な概念であるRack Middlewareについて学びます。

## 目次

1. [Rack入門 概念編(1/3)](https://qiita.com/nishio-dens/items/e293f15856d849d3862b
)
1. [Rack入門 Rack Application編 (2/3)](https://qiita.com/nishio-dens/items/852d7604b34d20514a70)
1. [本記事] [Rack入門 Rack Middleware編 (3/3)](https://qiita.com/nishio-dens/items/8011842f50995f46eafe)

## Rack Middlewareとは

はじめにややこしいことを言いますが、Rackはミドルウェア(Middleware)です。
アプリサーバーとフレーム

元記事を表示

Rack入門 Rack Application編 (2/3)

[前回](https://qiita.com/nishio-dens/items/e293f15856d849d3862b) はRackが必要とされた背景と、基本的な概念について説明しました。
今回は実際にRackプロトコルを使いアプリサーバーと通信するプログラムを作りながら、Rackに関する理解を深めていきます。

## 目次

1. [Rack入門 概念編(1/3)](https://qiita.com/nishio-dens/items/e293f15856d849d3862b
)
1. [本記事] [Rack入門 Rack Application編 (2/3)](https://qiita.com/nishio-dens/items/852d7604b34d20514a70)
1. [Rack入門 Rack Middleware編 (3/3)](https://qiita.com/nishio-dens/items/8011842f50995f46eafe)

## Hello Rack Application

基本を理解するために、簡単なRackアプリケーションを作っ

元記事を表示

Rack入門 概念編 (1/3)

RailsやSinatraなどのRuby製Webフレームワークを利用されている方は、Rackというキーワードを一度は目にしたことがあるのではないでしょうか。

よく聞くけど詳しくは知らない、そんなやつがRackです。

今回は自分の知識の整理も兼ねて、Rackとは何ものなのかについて調べたメモを、ここに残します。長かったので、全3回に分割しています。

## 目次

1. [本記事] [Rack入門 概念編(1/3)](https://qiita.com/nishio-dens/items/e293f15856d849d3862b
)
1. [Rack入門 Rack Application編 (2/3)](https://qiita.com/nishio-dens/items/852d7604b34d20514a70)
1. [Rack入門 Rack Middleware編 (3/3)](https://qiita.com/nishio-dens/items/8011842f50995f46eafe)

## Rackとは何か。ひとことで

– Webアプリケーションサーバーとアプリ

元記事を表示

【Rails】Strong Parameters

## Mass Assignment
複数のカラムをまとめて指定すること

“` user_controller.rb
user = User.new(email: “hoge@email.com”, password: “hoge”)
“`

## Strong Parameters
許可されたカラムのみ使えるようにすること

* `require` 必須とする属性
* `permit` 許可する属性

“` user_controller.rb
private
def user_params
params.require(:user).permit(:email, :passwordt)
end
“`

## リンク
* [Strong Parameters – Railsガイド] (https://railsguides.jp/action_controller_overview.html#strong-parameters)
* [GitHub、Mass Assignment利用の脆弱性を突かれる] (https://www.infoq.com/j

元記事を表示

【Rails】devise_token_authで新規ユーザー登録時にUnpermitted parameters: が出たときの対処法

## はじめに
gem **devise_token_auth**を使っていて、新規ユーザー登録時に以下エラーが出たときの対処法を残します。

“`shell
Unpermitted parameters: 保存されて欲しいカラム名
“`

**自分でUserテーブルにカラムを追加して、保存しようとしたら**
発生する内容です。

今回、自分の場合は`:age`と`:gender`を追加しようとしたところ発生しました。(以下参照)

“`shell
Unpermitted parameters: :age, :gender
“`

これを解決していきます。

## 環境
“`yaml
OS: macOS Catalina 10.15.1
zsh: 5.7.1
Ruby: 2.6.5
Rails: 6.0.2.1
“`

## 結論:`registrations_controller`に追記

“`ruby:registrations_controller
class Api::V1::Auth::RegistrationsController < DeviseTokenA

元記事を表示

3ヶ月で Rails 4.2 → 5.2 にした軌跡

## 概要
[資格スクエア](https://www.shikaku-square.com/)の PM をやっています岩瀬と言います。[資格スクエア](https://www.shikaku-square.com/)は、法律系難関資格に特化したオンライン学習サービスです。

サービスを開始してから数年が経ち、1つの大きな問題がありました。それは Rails のメジャーアップグレードです。

長年の負債が溜まっていたので、なかなかメジャーアップグレードできずに苦しんでいたのですが、フリーランスのカルパスさん([yhirano55](https://github.com/yhirano55))の加入で一気に進みました。

カルパスさんが方針を考えて実装し、それをレビューでサポートしたラスタムさん([rastamhadi](https://github.com/rastamhadi))はじめ、チーム一丸となって取り組んだ結果、わずか3ヶ月で成し遂げられるミラクルを目撃したので、その内容をまとめました。

## 記事の目的
テストカバレッジが低くても、Rails のメジャーアップグレードがで

元記事を表示

railsのDBで型をintegerからfloatへ変更しnumber_fieldで小数点を扱えるようにする

前回の記事の続きで初めてfloat型を扱ったのでメモ

## やりたい事

– DBに間違ってinteger型で作ったカラムをfloat型に変更
– form_for内でnumber_fieldで小数点を扱えるようにする
– DBに保存した値を合計するメソッドを作る

## 参考

>
【Rails】form_for の number_field で小数を入力できるようにする
https://qiita.com/tegnike/items/07f789eb22c7a7bf6a19
>
マイグレーションを使ったカラムの追加、削除、データ型の変更 [ 自分用メモ ]
https://qiita.com/dawn_628/items/13fa64dc6d600e921ce3

>
【Rails】カラムの合計値を求める!
https://qiita.com/tomokichi_ruby/items/8758a91566957cfc5429

## number_fieldでは整数のみしか扱えない

“`erb:new.html.erb
<%= form_for @count_time do

元記事を表示

HerokuでS3に画像をアップロードした話[Rails][S3][CarrierWave][fog]

転職活動用にポートフォリオを作っています。
DTPの作品も多く、画像が全部でおよそ18MBあったのですが、Herokuの無料版の容量は5MBのため、画像の外部ストレージとしてS3を利用するようにしました。

調べたら、多くの人がつまづいているようでしたので、自分のためにも手順をメモしておこうと思います。

# S3の利用設定
まずは、S3の利用設定を行います。手順については、こちらのサイトを大変参考にさせていただきました。

[【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法][1]
[1]:http://vdeep.net/rubyonrails-carrierwave-s3

↑こちらの記事以上に丁寧な説明はないと思いますので、S3の設定についてはこちらをご参照いただければ幸いです。

# gemをインストール
画像アップロードに必要な、以下のgemをインストールします。

– `carrierwave`…画像をアップロードするgem
– `mini_magick`…画像をリサイズするgem
– `fog`…S3などのクラウドストレージ内の画像

元記事を表示

コントローラー名とアクション名でSCSSを呼び出す

例えば WelcomeController の index アクションが呼ばれた場合、デフォルトの状態だとビューには welcome.css(.scss) がロードされるのだけど、これを呼ぶかどうかについて、ファイルの有無とか controller での変数で判定できたらいいのになという話。

色々方法はあるかと思うのですが、以下のようにしてみました。

assets/stylesheets/application.css

*= require_self
*= require_directory .
デフォルトだと require_tree . となっている箇所を require_directory . にする。こうすることでルートディレクトリ( assets/stylsheets/* )の css しか自動でインポートしないようにする。

ついでにスタイルシートのディレクトリも以下のように views っぽくする。

f:id:ltcmdr927:20121209105229p:plain

HEAD タグは application.html.erb で編集しているので、そ

元記事を表示

Railsチュートリアルメモ – 第4章・第5章

[メモ目次はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

[Railsチュートリアル第4章はこちら](https://railstutorial.jp/chapters/rails_flavored_ruby?version=5.1#cha-rails_flavored_ruby)
[Railsチュートリアル第5章はこちら](https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#cha-filling_in_the_layout)

Railsチュートリアルで気づいたことのメモを記載していきます

## 4.1 動機
Rubyに関する知識を深めていく章。
手始めに条件分岐で異なる文字列を返すhelperを自作する。

## 4.2 文字列とメソッド

### ポイント
– 文字列の式展開 => Rubyはシングルクォート文字列の中では式展開を行わない(シェルスクリプトと同じ)
– putsメソッド(printメソッド +

元記事を表示

【Rails】バリデーション

覚えたバリデーションのメモとして残します。

#トリガされるメソッド

* create
* create!
* save
* save!
* update
* update!

#書き方

“`ruby:app/models/person.rb

class Person < ApplicationRecord #ここに記載 #validates :属性, バリデーションヘルパー end ``` #バリデーションヘルパー `presence: true` 属性が「空でない」 `length: {maximum: 140}` 属性の値の長さが140以下 `uniqueness: true` 属性の値が一意(unique)であり重複していない `format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i }` 有効なメールアドレスかどうか

元記事を表示

Routing Error No route matches [PATCH] “/admin/users/1″が発生

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#Formtastic::UnknownInputError Unable to find input class Input

このエラーが起きた状況は、Active Adminで作成したユーザー管理画面において編集機能を追加するために
actionsに:editを追加した所、発生しました。

“`app/admin/users.rb
actions :index , :show , :edit
“`

Routing Errorと書いていることから、ルーティングに何らかのエラーが出ていることが考えられる。
さらにその下に
No route matches [PATCH] “/admin/users/1”
と書いてあることから、”/admin/users”ってところと[PATCH]がマッチしていないことが考えられる。

“rake routes”で、どの様に設定されているルーティング

元記事を表示

rails: belongs_to :user, optional: trueとは?

簡単に説明すると、belongs_toで“optional: true“を設定することにより外部キーのnilを許可できるようになります。

### “optional: true“はどんなときに使われるのか?
例えば、Q&Aのようなサービスを作る際にuserテーブルとquestionテーブルがあるとする。
その際に、ログインしていないユーザーからでも質問をポストできるシステムを作るときに使われたりする。
基本的にアソシエーションを書くときは外部キーが無いっていうことはあまりないがたまにある時もあるのでその際に“optional: true“をつけなかったりするとバグの温床になるので気をつける必要がある。

ただDBの設計上、外部キーのnilを許可することが少ない気がするので、あまり使う設定ではないかもしれません。

元記事を表示

OTHERカテゴリの最新記事