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

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

MySQLの導入方法

#ローカルでのMySQLインストール

Homebrewがインストールされているかを確認

“`
brew –version
“`

Homebrewのインストールが完了している状態で、次にMySQLをインストール。バージョン指定したいときは指定してあげる。

“`
brew install mysql
“`

インストールされたMySQLの情報は下記のコマンドで確認

“`
brew info mysql
“`

Railsにてアプリケーションを新規で作成する際、デフォルトではSQLiteが設定されるため、新規アプリ作成時のコマンドにて下記の通り明示的にMySQLを利用することを宣言。

“`
rails new アプリケーション名 -d mysql
“`

MySQLを「起動」する際には下記のコマンド

“`
mysql.server start
“`

実際にMySQLを利用するにはログインする必要があるため、一旦デフォルトで用意されている「root」ユーザーでログイン。
下記のコマンドで「root」ユーザーでのログインが可能。

“`
mysql -ur

元記事を表示

railsで数値を3桁で区切る。「delimited」メソッドで解決

数字を3桁で区切る方法を解決しましたので備忘録として。
例:1000 → 1,000

#仕様
Rails 5.1.7
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#やりたいこと
productsテーブルのpriceカラムを表示させたいです。
↓productsテーブル
EX-IT.png

#「delimited」メソッドで解決
“`php:sample.html
<%= product.price.to_s(:delimited)%>
#例 => 12,345,678
“`

#「delimiter」オプションで任意の文字で桁を区切れます。
“`php:sample.html
<%= product.price.to_s(:delim

元記事を表示

EC2上でRailsアプリケーションにDockerを導入する(Rails、Nginx、RDS)

前回の記事(開発環境において既存のRailsアプリにDockerを導入する方法(Rails、nginx、mysql))で開発環境において、既存のRailsアプリケーションにDockerを導入する方法をご紹介しました。
今回は本番環境においてDockerを導入する方法をご紹介します。

# 前提
開発環境ではRails、nginx、MySQLをコンテナ化しましたが、本番環境においてデータベースであるMySQLをコンテナ化するのは、あまり良くありません。(消える可能性があるため)
そのため、今回はAWSのサービスであるRDSのMySQLを利用します。

# 環境
– Mac OS
– Ruby2.5.7
– Rails5.2.4
– mysql5.7
– nginx1.15.8

# 事前準備
– ローカル環境のご自身のRailsアプリケーションにDockerが導入されていること。
(チェックボックス のカウント&出欠データの表示

TECH CAMPのチーム開発も終了し、個人アプリに手を加えています。(個人アプリに関しては[こちら](https://qiita.com/ruby55tomo/items/69032cf98558825705fa #Qiita))
今回は2つの実装を紹介します。

まず1つ目。幼稚園の先生が出欠確認をする際、出席している園児を確認しチェックボックスにチェックを入れる仕様になっていますが、それをカウントし出席者の合計人数を自動で表示される様実装します。

ビューです。(前後の記述は省略)

“`app/views/messages/index.html.haml
.main__main-ber__check-box__name-check__member-number
出席(名):
= f.text_field :member, class: “member”
欠席・遅刻・早退(名):
= f.text_field :absence, class: “absence”
合計(名):
= User.count – 1
.main__main-ber__che

元記事を表示

【Rails】多階層カテゴリー実装〜ancestry導入〜

某プログラミングスクールのチーム開発としてフリマ的なアプリを開発する中、
多階層カテゴリーテーブルを実装するのにかなり苦労しましたので、備忘録として残します。

多階層のカテゴリーというのは、下記の写真のような機能です。
![category.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642721/4a703299-37f8-619b-dfaf-7a8185efe72d.gif)

選択した値に紐付いたレコードが出現するようになっています。
カテゴリーの内容は一つのテーブルで管理すべきですが、それぞれのカテゴリーにどうやって紐付けするのでしょうか?

それを容易にしてくれるのが`ancestry`という`gem`です。

早速`ancestry`を導入しましょう。

## 参考にさせていただいたページ
[ancestryの使い方](https://qiita.com/KOKEINTER/items/f61323552b1cc793f316)

## ancestryの導入

“`:Gemfile

元記事を表示

【AWS EC2】ec2-userにログイン中、 $ mysql -u root -p でmySQLにログインしようとした時に、 Access denied for user ‘root’@’localhost’ (using password: ) エラーが出た場合の解決方法

AWS EC2にRailsアプリをデプロイするための準備として、DB(MySQL 5.7)に接続時に少しだけハマったので備忘録的に残しておきます。
同じようなエラーが起きた方の助けになれば・・・。

下記コマンドでDBへ接続する。

“`
$ mysql -u root -p
“`

“`
Enter password:
“`

あれ、パスワードって何だったっけ?
それらしい文字列を入力してみるて接続を試みるが、案の定下記のようなエラーが発生。

“`
Access denied for user ‘root’@’localhost’ (using password: yes)
“`

これは困った・・。そもそも設定した覚えもない?

パスワードを確認するには以下のコマンドで可能。一度確認してみよう。

“`
cat /var/log/mysqld.log | grep password
“`
するとまたこのエラー(catはファイルの中を確認する時のLinuxコマンド)。

“`
Access denied for user ‘root’@’localhost’

元記事を表示

【PAY.JP】#1 クレジットカード登録機能 実装の軌跡

#### はじめに
チーム開発にて Ruby on Rails を用いてWebアプリを作成中です。

まだまだ未熟なため、記述やコードがわかりにくいかもしれません。
記載しきれなかったものや変更点は、随時更新・ブラッシュアップしていきます。

私と同じ初学者の方は検索に検索を重ねると`「いま自分が何を調べたいのか」`が分からなくなってしまいがちですので、専門用語やカタカナ用語は都度 解説します。

#### PAY.JPとは
*cf. https://paymentnavi.com/paymentnews/51558.html*

顧客のクレジットカード情報をアプリ側のデーターベースには保存せず、PAY.JPに保存します。顧客とクレジットカードを紐づけて処理することにより、安全にクレジットカードの決済が行えるAPIとなります。

フリーマーケットアプリの開発で商品購入機能については、このPAY.JPを利用しクレジットカードで決済を行う実装としました。

>`API`:
Application Programming Interface(アプリケーション・プログラミング・インターフェイ

元記事を表示

[Rails]1対多対1の孫モデルのidsを取って来るには

(自分用)
#TL; DR
pluckを使う
#モデル構造
Userモデル

“`ruby:app/models/user.rb
class User < ApplicationRecord has_many :follow, class_name: 'Friendship', foreign_key: 'follow_id' has_many :followee, class_name: 'Friendship', foreign_key: 'followee_id' ``` Friendshipモデル ```ruby:app/models/friendship.rb class Friendship < ApplicationRecord belongs_to :follow, class_name: 'Account', foreign_key: 'follow_id' belongs_to :followee, class_name: 'Account', foreign_key: 'followee_id' ``` UserがFriendshipとのAs

元記事を表示

Railsアプリで画像の保存先をS3に変更する。その1

## はじめに
画像を保存する機能を持つアプリでは、アプリのディレクトリ内に画像が保存されていました。
今回の記事では画像の保存先をS3に変更してみます。

## バケットを作る
バケットとは、S3で画像が保管される場所のことです、まずはバケットというものを作りましょう。
まずはAWSにアクセスし、サービスからS3を選択します。
![スクリーンショット 2020-06-10 12.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429077/207b8c06-22c8-d32d-555e-47c70fb0de4e.png)
遷移先でバケットを作成します。
![スクリーンショット 2020-06-10 12.40.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429077/84c11adf-742f-faf8-888e-fb5a9c89ec83.png)
バケットの名前を入力しましょう。この名前は一意になる

元記事を表示

【Rails】最速でLINEボットアプリの開発環境構築~公開まで

※途中で書くのに心が折れ未完です。

# 0. やること

以下の3ステップで行います。

1. LINE Developersでチャネルの作成
2. LINEボットローカル開発環境の構築
3. herokuで本番環境の構築

# 1. LINE Developersでチャネルの作成

– 以下ページの通りに進めます。

[Messaging APIを利用するには
](https://developers.line.biz/ja/docs/messaging-api/getting-started/)

1. コンソールにログインする
2. 開発者として登録する(初回ログイン時のみ)
3. 新規プロバイダーを作成する
4. チャネルを作成する

以下のページまで来れたら成功。

スクリーンショット 2020-05-31 15.18.35.png【Rails】acts-as-taggable-onでマイグレーションエラーが起きたときの解決方法

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 事象

`$ rails db:migrate`やCapistranoでのデプロイ時に、
下記の様に`acts-as-taggable-on`のマイグレーションファイルでエラーが起きる。

“`terminal:ターミナル
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Cannot drop index ‘index_taggings_on_tag_id’: needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`

20200525095250/db/migrate/20200516111153_add_missing_unique_indices.acts_as_t

元記事を表示

英語のニュースAPI及びWikipediaのgemを使用して記事を取得する方法

現在、英語のニュース及びWikipediaの英語のページを、ユーザーが検索するキーワードに応じて収集して保存するアプリを製作しています。日本語での記事が少なかったので、この記事で説明してみようと思います。現在プログラミングを勉強中で、Qiitaに記事を投稿するのも初めてなので、間違いがありましたら、ご指摘いただければと思います。

## 使用したAPI
こちらの記事を参考に、各ページを訪問して使いやすそうなAPIを選定しました。日系の新聞のAPIも探しましたが、見つかりませんでした。ただし最後に紹介するNews APIでは国を指定することができ、日本語の記事を取得可能です。
https://en.wikipedia.org/wiki/List_of_news_media_APIs

・The New York Times
https://developer.nytimes.com/

・Financial Times
https://developer.ft.com/portal

・The Guardian
https://open-platform.theguardian.com/

元記事を表示

ヘイヘイバリデーションってモデルとマイグレーションファイルどっちに書けば良いんだyo

本日2記事目ですね。
もうビール飲みたいけどまだ飲まないんだから!!
(飲みながら記事書いて、誤字脱字多かったら絶望なため):frowning2:

さーて今回はバリデーションを書く場所について。:cop:

張り切っていくわよ〜〜〜〜!!

#1 モデルへのバリデーション

“`ruby:user.rb
validates :email, presence: true
validates :first_name, presence: true
validates :last_name, presence: true, length: { maximum: 15 }
“`

こんな感じで書くと思うんですよ。
説明すると

【email】 空で値を保存できない
【first_name】 空で値を保存できない
【last_name】 空で値を保存できない、15文字以内じゃないと保存できない。

って感じのバリデーションを書きます。
じゃあこれで問題なしだね!!って思うでshow。:santa:

###これだとmysql(DB)に直

元記事を表示

【Rails】acts-as-taggable-onを用いたタグ機能と、tag-itを用いたタグ入力補完機能の実装

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/480eabec-7c97-a6c1-e6b6-7b226e67d90d.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[投稿機能実装](https://qiita.com/matsubishi

元記事を表示

100日後に一人前になるエンジニア26日目

#100日後に一人前になるエンジニア26日目

はいということで早いもので26日目です。
今日のテーマ
#dockerでredisに接続後sidekiqを用いて非同期処理を行う

ということでやっていきます。

##DockerFile

まずdockerfileにredisの記述を追加します。

redis:の部分でimageとport番号を指定しています。
あとはenvironmentでredis_urlを指定しました。

“`dockerfile
version: ‘3’
services:
db:
image: postgres:11.2-alpine
volumes:
– ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: /bin/sh
environment:
WEBPACKER_DEV_SERVER_HOST: “0.0.0.0”
RAILS_SERVE_STATIC_FILES: “1”
EDITOR: “vi

元記事を表示

RailsのdeviseのController,View,URLのカスタマイズ(初心者向け)

#どんな記事?
ここではrailsでアプリを作る際に認証機能を簡単に作成するgemである’devise’を使う時の、コントローラーとビューをカスタマイズする方法とその考え方を解説する。
#deviseとは

“`
$ rails g devise モデル名
“`

とするだけでモデルを作成してくれて、内部的にビューやコントローラーも作成される。
そのためこのコマンドをうつだけで、モデル、ビュー、コントローラーの三つを作成することができる。
非常に簡単にログイン認証の仕組みを作ることができる。

逆に言うと
デフォルトで設定される URL
デフォルトで使用されるコントローラー
デフォルト使用されるビュー
が存在するため、 細かい設定をするためには色々と変更しなければならない。 今回はその設定方法と考え方について解説する。

#デフォルトではどうなっているか

まず、

“`
$ rails g devise member
“`
とするとmemberモデルが作成され ルーティングは以下のようになる(必要部分だけ)。

“`
Pr

元記事を表示

payjpを使ってクレジットカード機能を導入しちゃおうってわけ(カード登録編)

今日は涼しいですね。
最近はスーパードライが上手いので毎日1本飲んじゃいますね。
でもやっぱり生ビールが一番ですよね。:basketball_player_tone4:

さぁて!!!今回はクレジットカード登録編ですわよ!!!
まず大前提としてフリマアプリを作成している想定ってのをわかって頂戴!!

payjpがわからない方はまず導入編をチェケラッ!!
[導入編](https://qiita.com/rockettetsu/items/445d949ffcb28441a187)

さぁいくわよ!!!:eye:

#1 payjpと通信するための鍵を登録する

まずはpayjpのAPIをチェケラ!
6A5DA490-3F5A-4E05-879D-5A272EF4FF57.png

(テストも本番も秘密鍵は公開しては

元記事を表示

[Rails]STI使ったらDBがスッキリした

STI使ったらテーブルがスッキリした話し。

# 概要

– サッカー選手を登録して複数の情報をもたせたい。

> – `Player`モデル作成。
– 持たせたい情報の内、`ポジション`、`所属`(日本代表とか五輪代表とか)、`タイプ`(スピードとかパワーとかテクニックとか)は多対多の設計になる。

– スパイクを登録して複数の情報を持たせたい。

> – `Spike`モデル作成。
> – 持たせたい情報の内、`適応グラウンド`、`色`は多対多の設計になる。

↓最初はこんな設計になりました。

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

見ての通り冗長だし、他に多対多で持たせたい情報が後から追加されるたびにテーブル2つ追加しないといけない。

ということでSTIを使うとこうなる。

[![Image from Gyazo](https://t.gyazo.com

元記事を表示

Rails gem ‘geocoder’を使って入力した住所をGoogleMapに表示させる

###「東京都千代田区」のような住所であれば緯度経度を取得してGoogleMapに表示されるが、「東京都千代田区丸の内2-4-1」のように番地まで指定すると、緯度経度を取得できずにマップが表示されなかったが解決できたので投稿。

##前準備
・googlemapを使用するためにまずはAPIを取得する。APIの取得はこちらを(https://qiita.com/nagaseToya/items/e49977efb686ed05eadb)

・住所を保存するカラム、緯度経度を保存するカラムを作成。
latitude・longitudeが緯度経度。

“`schema.rb
create_table “tours”, force: :cascade do |t|
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
t.string “address”, null: false
t.float “latitude”
t.float “longitude”

元記事を表示

MySQL5.7のインストール

これがめちゃくちゃ参考になった。
https://weblabo.oscasierra.net/mysql-57-homebrew-install/

“`
asatokensei@MacBook-Air memopy % brew install mysql@5.7
Updating Homebrew…
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
benthos broot clojure exploitdb freetds inxi jc mutt phpstan terragrunt wtf yq

==> Downloading https://homebrew.bintray.com/bottles/mysql%405.7-5.7.29.catalina.bottle.tar.gz

元記事を表示

OTHERカテゴリの最新記事