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

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

【Rails】Google Mapに複数マーカーを表示し、クリックしたら吹き出しを出す方法

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/840e85eb-bf4a-e9b6-56da-1bcd16818230.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)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[Google Map表示](https://qiita.com/matsubishi5/items/196fa1941da2152b6d5d)
・[Gocoding APIで緯度経度を算出](https://qiita.

元記事を表示

Rails6のAPIモードでGraphQLを使う方法(エラー対策も含む)

##はじめに
railsでGraphQLを使うための方法をまとめてみました。

必要最低限の実装にとどめ、GraphQLの動作確認ができることをメインに紹介します。(+αでエラーの対策を記載しました。)
そのため、Queryの設定はしていません。

【参考】
[Rails APIモードで始めるGraphQL](https://qiita.com/dkawabata/items/4fd965ee6d7295386a8b)
[【Rails】graphql-rubyでAPIを作成](https://qiita.com/k-penguin-sato/items/07fef2f26fd6339e0e69)
##アプリ作成
“`
$ rails new demo-graphql –api #オプションで–apiをつけるとAPIモードでappを作成
“`

Gemfileに`graphql`, `graphiql-rails`(開発環境で使用)を追加

“`:Gemfile
gem ‘graphql’ #追加

group :development, :test do

元記事を表示

AWSに手動でデプロイする

AWSに入って手動でデプロイしたときのコマンドです。

前提
– EC2インスタンス作成済
– RDS DB(mysql)作成済

“`bash
# updateして必要なものを入れる
sudo yum -y update
sudo yum install -y git curl unzip gcc openssl-devel readline-devel mysql-devel

# git config
git config –global user.name “xxxxxx”
git config –global user.email “xxxxxxxx@email.com”

# timezone
sudo timedatectl set-timezone Asia/Tokyo

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
~/.rbenv/bin/rbenv init

mkdir

元記事を表示

findとfind_byの違い

両者の違い

“find“
-検索条件として指定できるのは『id』のみ
-データを複数取得できる
-検索結果が無い場合は例外を発生させて処理を中断
“find_by“
-検索時に複数の条件を指定できる。また、『id』以外ののカラムでも検索できる
-取得できるデータは最初にマッチした1件のみ
-検索結果が無い場合nilを返すため処理を中断されない

使い方(find)

基本形はモデル名にfindを繋げて引数を指定。
それによって該当するモデルのテーブルからデータを検索できる。

“`ruby
モデル名.find(引数)
“`
指定できる引数は
『数値型』、『文字列の数字』、『数字のリスト』、『数字の配列』
該当する『id』のデータが見つからない場合は**例外(RecordNotFound)**が発生する

【例】Userモデルからidが1のデータを返す

“`ruby

User.find(1)
“`
【例】Userモデルからidが1,3,5のデータを配列で返す

“`ruby

User.find(1, 3, 5)
“`

使い方(find_by)

元記事を表示

Dockerイメージを快適にビルド for Rails6

# 本記事の趣旨
[令和時代のRails運用]
(https://speakerdeck.com/joker1007/ling-he-shi-dai-falserailsyun-yong)
こちらのスライドに掲載されている以下のDockerfileが、キャッシュやマルチステージビルドを利用したベストプラクティスとして参考になりました。

“`Docker:Dockerfile
# syntax = docker/dockerfile:experimental

# Node.jsダウンロード用ビルドステージ
FROM ruby:2.6.5 AS nodejs

WORKDIR /tmp

# Node.jsのダウンロード
RUN curl -LO https://nodejs.org/dist/v12.14.1/node-v12.14.1-linux-x64.tar.xz
RUN tar xvf node-v12.14.1-linux-x64.tar.xz
RUN mv node-v12.14.1-linux-x64 node

FROM ruby:2.6.5

# nodejsをイ

元記事を表示

Routing Error[No route matches [GET] “/logout”]エラーと格闘した話

##前提
-**Rails 6.0.3.1**
-**ruby 2.6.3**

***

railsでアプリを作成中にヘッダーにLogoutのリンクを作成していました。

動作確認で、ボタンを押してみると、
あらまあ….

“`
No route matches [GET] “/logout”
“`

お怒られました….
頼むから、ログアウトさせてくれ…
旅立たせてくれよ…

こうして長いRouting Error[No route matches [GET] “/logout”]エラーとの
戦いが始まるであろうとは、知る由もなかったのである。

***

##やってみたこと

##①ルーティングの確認

*No route matches*って言ってるし、どうせルーティングミスってるんでしょ!!!
ほんまアホやなワイ。

ちゃんとlogout_path使ってるし、HTTP Verb?: POSTになってるやんな(汗)。

**ルーティングはあってはるやん**

##②viewでメソッドの指定の確認

次いこ次。飲み足りんし、二軒目にきました。

“`
<%

元記事を表示

【Rails】deviseでのセッションタイムアウト設定

# deviseでのセッションタイムアウト設定

### 目次
0. セッションタイムアウトを設定するメリット
1. セッションタイムアウトを設定するデメリット
2. deviseでのセッションタイムアウト設定

## 1. セッションタイムアウトを設定するメリット
1. セッションの盗用などの不正行為の対策になり、安全にアプリケーションを運用することができる
2. 利用ユーザーのステータスを判定することによって、サーバー側の負担を軽減させることができる

## 2. セッションタイムアウトを設定するデメリット
1. 入力フォームなどで、一度中断をし、再開後に入力を行うことができないこと
2. ログイン状態が切れる回数が多いと、ユーザーが再度ログインする必要があるので、アプリケーションの使い勝手が悪いと判断されてしまうこと

## 3. deviseでのセッションタイムアウト設定

### 3-1. Deviseのセッションタイムアウトを設定

以下の記述を入力しましょう。
(コメントアウトされているので、コメントを解除すればOK)

“`config/initializers/de

元記事を表示

define_methodってどんなmethod?

#define_methodってどんなmethod?

gemを読んでいたらdefine_methodなるメソッドが出てきたけど、
よくわからなかったので調べてみた。
直訳するとmethodを定義する。って名前のメソッド。
ますますわからない。。

ということで例をみてみます。

“`ruby.rb
NUMBERS = %w(zero one two three four five six seven eight nine)

NUMBERS.each_with_index do |word, num|
define_method word do |i = nil|
i ? num * i : num
end
end

p two #=> 2
p two(2) #=> 4
p nine #=> 9
p nine(3) #=> 27
“`

**define_methodはmethodを動的に定義できるメソッドです**
上記の例でもtwoやnineと言ったメソッドは直接定義したわけではないけれど
メソッドとして使えることができます。
これはde

元記事を表示

Rails】undefined local variable or method エラーについて【定義しているのに出る!!

ちゃんと定義しているのに「undefined local variable or method」エラーが出るエラーに苦しんだので。。。

#起きたエラー
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647361/5f43aaeb-b607-56d1-fcc1-15d40c82761c.png)

「invite」というメソッドがありません!というエラーに…。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647361/714a68c5-3706-c43a-935f-ac28b7c3160f.png)
でも「inviteメソッド」は間違いなく書いてあります。

#原因
「def invite」の直前部分が「全角スペース」になっているだけでした

全角スペースを半角スペース2個でインデント揃えたら解決しました。

とっても初歩的なミスでした。

元記事を表示

非同期でのお気に入り機能の実装

## はじめに
お気に入り機能を作成しました。
いいね機能は作ったことがあるので、いいね機能と同じ感じで作成すれば余裕でしょ!と思っていました。
実際に作ってみて、お気に入りにいれることは簡単にできました。
ですがajaxを用いての非同期にしないとお気に入りボタンを押すたびにredirect_toでページ更新されてしまい、ユーザーライクでは無いと思いました。
下のgifが完成品です。
![Alt text](https://gyazo.com/5f09e1637c2982e9e05b6cb934dbace2/raw)

## コード&解説
### モデルの作成
favoritesモデルを作成します。

“`ruby
class CreateFavorites < ActiveRecord::Migration[5.2] def change create_table :favorites do |t| t.references :user, null: false t.references :product, null: false

元記事を表示

中学2年が1週間で自分のアイディアをいるかいらないか投票できるTogmarks(トグマークス)作った

アイディアにいるかいらないか投票できる[Togmarks](https://www.togmarks.com/)というサイトを作りました。5月26日に作り始めて6月2日に公開しました。たった1週間しかかけていませんが前作った[Qua](https://quaquestions.herokuapp.com/)よりもいい出来だと思っています(機能の数は少ない)。今回も前と同じようによかった点と悩んだことを振り返ろうと思います。

# 紹介

## トップページ
![togmarks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/e5f99b11-12c1-c283-eec7-971e7ac0d239.png)

素人が個人で1週間で作ったのですごくいいとは言えませんが青色をアクセントカラーにしてシンプルなデザインはそこそこ気に入っています。

##投票画面
![togmarksshow.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

ログイン状態且つ住所テーブルにデータが登録してある場合としてない場合の条件分岐

“`ruby
def new
if current_user && Address.find_by(user_id: current_user.id).present?
@address = Address.find_by(user_id: current_user.id)
render action: :edit
else
@address = Address.new
end
“`
“`ruby
if current_user && Address.find_by(user_id: current_user.id).present?
“`
2行目 …presentメソッドはオブジェクトのレシーバーの値が存在すればtrue、存在しなければfalseを返すメソッド。if文などの条件分岐でよく使用するので覚えておきたい。
current_user.idと一致するuser_idが存在すればeditアクションが動く。
ちなみに(renderで同じコントローラーのアクションが動かせるのは本日知りました)

6行目…cur

元記事を表示

Rails 5.2/6.0 で MessageEncryptor を使うときは初期化タイミングに気を付けよう

Rails 5.2 から `ActiveSupport::MessageEncryptor` のデフォルト暗号方式が `aes-256-cbc` から `aes-256-gcm` に変更となった。しかし、期化タイミングによっては意図しない暗号方式を使うことになる場合があるため紹介する。

# Rails 5.2

以下のバージョンで確認:

– Ruby 2.6.5
– Rails 5.2.4.3

## デフォルト

まず `rails console` でデフォルト暗号方式を確認する。

“`irb
irb> encryptor = ActiveSupport::MessageEncryptor.new ‘key’
=> #

元記事を表示

【git/基本編】これだけわかれば100%オッケーなgitの仕組み&コマンド完全攻略版

[![git basic tutorial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643876/7c28d7ff-4d1c-8658-ac20-9f3f0c6cdcd2.png)
]
(https://www.twinzlabo.com/git_super_basic_flow_command/)

# 今回やること
gitコマンドを使えることは個人開発でもチーム開発でも必須です

特にチーム開発ではgitを使う機会が非常に多くなります

かなり基本的な仕組みとコマンドのみなので実際に使って身につけていただけたらと思います

# git(基本編)
## gitの仕組み
### ①ワークツリー
下記コマンドでワークツリーでの変更をステージに記録していきます

“`
$ git add
“`
### ②ステージ
下記コマンドでステージからローカルリポジトリにコミット(記録を保存)することができます

“`
$ git commit
“`
“`
$ git commit -m “”
# メッ

元記事を表示

Rails tutorialでMySQLを使う方法

rails tutorialも2週目に入りsqliteでは無く、今後を考えmysqlを使いたいと考えた。

rails new アプリケーション名 –database=mysql

上記を使用することでmysqlが使用できるとのことだがエラーが発生。
下記を実行しろと言われるのでそのまま従う。
gem install mysql2 -v ‘0.5.3’ –source ‘https://rubygems.org/’
rails sを使用するとmysqlにエラーがあるよと言われる。bundle installすると同じエラーが発生してしまう。

結論から言うと、下記コマンドを順に実施することで解決した。
sudo apt-get install libmariadb-dev
sudo apt-get install libmysqlclient-dev
sudo yum install mysql-devel’
gem install mysql2 -v ‘0.5.3’ –source ‘https://rubygems.org/’

新しいパッケージを入れるためには、その元となる

元記事を表示

Rails Herokuデプロイ手順

プログラミング初学者のため訂正がありましたらご指摘ください。
gitをインストールしている前提です。

# 自身の環境
– Ruby 2.5.1
– Ruby on Rails 5.2.4.1
– MySQL (gem ‘mysql2’, ‘>= 0.4.4’, ‘< 0.6.0') # デプロイの流れ 1. The Heroku CLIの設定 2. Herokuにログイン 3. Herokuにデプロイ # Herokuとは HerokuとはWebアプリケーションを簡単に全世界に公開できるクラウドプラットフォームです。 参考)HEROKU とは 以下のURLからHerokuのユーザー登録を行います。ユーザー登録は無料です。 https://signup.heroku.com/jp # 1. The Heroku CLIの設定 The Heroku CLIをインストールすることで、Herokuのコマンドが使えるようになります。 下記のリンクからOSを指定してダウンロードしてインストールを完了させてください。 https://devcenter.heroku.co

元記事を表示

【質問用メモ】paramsが全く理解できていない【Rails】

#paramsがまったくわからない【Rails】

paramsが全くと言っていいほどわからない。
色々分からない。

読み方→「ぱらむす?」
何の略?→「ぱらめーたー?」

paramsはハッシュらしいけれど、どこのデータに由来しているのかが全く分からない
progateではurlからデータを受け取っていた。

params→urlではなくて
url→paramsということ???

じゃあurlは何処から???
ルーティングの:idって何を指しているのか?

…悩む。きっとデータのやり取りの流れが理解できればすっきりするのだとおもいます。
分かり次第続きを書きたいと思います。

元記事を表示

[Rails]フォームのすべての値をワンクリックで初期化する(helperメソッド定義+JavaScript)

#はじめに
様々な検索条件を付けられる検索フォームを実装している中で、検索条件をワンクリックでリセットできる方法がないかと試行錯誤しました。

結果、下記の方法で実装できたのでまとめます。

#環境
– Ruby2.5.1
– Rails5.2.4

#手順
概要を簡単に説明すると、
**1. ヘルパーメソッドにリセットボタンタグを生成するメソッドを定義**
**2. ビューでそれを呼び出す**
**3. チェックボックスをjsでクリアする処理を書く**
という3本でお送りする感じです

##1. ヘルパーメソッドの定義
どのファイルでもいいですが、今回は`helpers/application.rb`に定義します。

“`ruby:helpers/application.rb
module ApplicationHelper
def reset_tag(value = “Reset form”, options = {})
options = options.stringify_keys
tag :input, { type: “reset”, value: v

元記事を表示

macにrailsがインストールできない

##この記事について
プログラミングの勉強をしています。
勉強の過程で得た知識を、忘れないようまとめておくのと共に、誰かの助けになればと思います。

##「rails -v」が上手くいかない!

“`
(base) hoge@MacBook-Pro ~ % rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your “rails” command.
“`
調べた通りにrailsをインストールしたのに、rails -vを何度実行してもこのエラーが出てしまいます。

##対処法
“`
rbenv rehash
“`
このコマンドを実行し、再度rails -vを実行すると

“`
(base) hoge@MacBook-Pro ~ % rails -v
Rails 6.0.3.1
“`
上手くいきました!!

##参考
https://

元記事を表示

【Rails】Geocoding APIを用いて高精度で緯度経度を算出し、Google Mapに表示する方法

# 目標
**ユーザーが登録した住所をマップの中心に表示し、マーカーを立てる。**
![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/73406c27-1c6e-0b81-179a-d6189f0c9453.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)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[Google Map表示](https://qiita.com/matsubishi5/items/196fa1941da2152b6d5d

元記事を表示

OTHERカテゴリの最新記事