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

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

RailsでGoogleMapsAPIを表示・ピン表示まで

#はじめに
過去に自分のポートフォリオでGoogleMapsAPIを利用していましたが、流れを忘れていたのでリマインドです。

#環境

rails 5.2.3
ruby 2.6.3

#今回すること
・現在地情報から経度緯度を取得しマーカーを表示する。
・取得した一覧情報をjson形式に変え、マーカーとして地図上に配置。
・地図の表示

###表示させるコントローラー作成、今回アクション名はsearchで。

“`ruby:spaces_controller.rb
def search
@spaces = Space.all
end
“`

###モデルの作成、住所を入力後緯度経度を自動取得させる。

“`ruby:space.rb
class Space < ApplicationRecord geocoded_by :address after_validation :geocode, if: :address_changed? end ``` ```ruby:schema.rb create_table "spaces", force: :cas

元記事を表示

Ruby on Rails チュートリアル(第4版) 第12章

##12.1.1 演習
1.この時点で、テストスイートが greenになっていることを確認してみましょう。
 省略

2.表 12.1の名前付きルートでは、_pathではなく_urlを使うように記してあります。なぜでしょうか? 考えてみましょう。ヒント: アカウント有効化で行った演習 (11.1.1.1) と同じ理由です。
 メールでURLを送付するから。

##12.1.2 演習
1.リスト 12.4のform_forメソッドでは、なぜ@password_resetではなく:password_resetを使っているのでしょうか? 考えてみてください。
 よく分からなかったので、[Railsのform_forにシンボルを与えるときはどのようなときか?](https://ja.stackoverflow.com/questions/18099/rails%E3%81%AEform-for%E3%81%AB%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E3%82%92%E4%B8%8E%E3%81%88%E3%82%8B%E3%81%A8%E3%81%8D%E3

元記事を表示

deviseのビューファイルに自動でbootstrapのスタイルを適用する

## 結論
“`
$ rails g devise:views:bootstrap_templates -f
“`
これで全てのdeviseのビューファイルに、自動でbootstrapのスタイルが適用される。
アカウント.png
ログイン.png
パスワード.pngsessionを使い遷移元の1つ前のページに戻る方法

## こんな人におすすめ
こういうことがしたい人。
戻るボタンを押してブラウザの2つ前のページに戻りたい。
![200724_session_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644314/7ad69f92-f05c-108d-90a3-8ae5a6b67634.png)

## 環境

“`
ruby 2.5.1
Rails 5.0.7.2
“`
## さっそく結論
`session`を使いましょう。

## 今回の経緯

– 購買機能のあるWEBサイトを作成していた(payjpを利用)
– 商品の詳細を表示してそのまま購入できる機能を持たせた
– ただし**クレジットカードを登録していない場合**は以下のページ遷移としたい

![200724_session_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644314/7ad69f92-f05c-108d-90a3-8ae5a6b67634

元記事を表示

【cygwin】Redmineを動かす

# 留意点

– 現在(2020-07-24)、bundleがバージョンアップを見据えた対応している。
– この関係もあり、古い情報は “`rubygem“`, “`bundle“` に注意
– 個人で利用することを前提に、sqlite3を利用する。

# ダウンロードファイル一覧
– redmine-4.1.1.tar.gz
– rubygems-3.1.4.tgz

# cygwinパッケージ一覧

– rubygemインストールで必要
– “`ruby“`, “`ruby-devel“`
– bundle installに必要
– “`mysql-devel“`, “`libsqlite3-devel“`
– nokogiriのインストールに必要
– “`libxml2-devel“`, “`libxslt-devel“`

# 各バージョン

| name | version | installation |
| — | — | — |
| ruby | 2.6.4p104 | cygwin |
|

元記事を表示

ActiveStorageをクラウドストレージ(GCS,S3, etc)で使ってた時に処理が遅くなる問題

# 概要

Heroku上で動かしていたRailsアプリの処理が遅かった時の調査メモです。
結論として、画像保存に使用していたGCPのクラウドストレージの部分がボトルネックとなっていました。

# 環境

– Ruby 2.6.3p62
– Rails 6.0.2.2

# 背景

Herokuの無料プランでRailsを使った趣味のWEBサイトを構築運用しています。
当初から処理はあまり早くないものの、SQLに関してもRedisでキャッシュを入れたりしていたので、まぁ無料ならこんなものかと思っていました。

しかしながら、一部のページのみ他のページより早い事に気がつき、何が原因かを調べることとしました。

# 調査

## 調査方法

一般的な方法ですが、下記のコマンドでログを出力させて処理時間を調べる事にしました。

“`bash
heroku logs –tail
“`

デフォルトでRailsはDEBUGログで処理時間を色々出してくれるので、まずはそこを確認する事にしました。

## ログの調査結果

当初はキャッシュしていない部分のSQLが遅いのかと思っていましたが、
S

元記事を表示

ElasticBeanstalkのアプリケーションログをCloudWatchで捕捉したい

サーバのログ問題ってあると思いますが、皆さんはどうされていますか?
よくあるパターンはfluentdで特定のログ保存用サーバに送るパターンだと思います。
他にもDatadogやInsight7でトラッキングする方法などありますが、いずれも設定が大変でエージェント仕掛けたりとかCloudFormation仕掛けたりとか挫折しやすいです(実際今回の記事書くときにもやってみたけど正直何度もサポートに聞く羽目になったし、仮に設定できても有料なのも痛い)。

あとdmsgとかアクセスログとかの保存は簡単だけど、アプリケーションログに関しては保存していないケースも多くて情報探すのにも苦労しました。

ElasticBeansTalkで作成したサーバのアプリケーションログは1時間とかでローテーションしてしかも消えてしまったり、AWSの管理画面でログのダウンロードしても出てこなかったりという問題があります。

ローカルでテストしているときはエラーのハンドリングは難しくないけど、本番じゃないと発生しない問題にはどう対処すればいいのか悩ましいところです。エラーのトラッキングはSentryも仕掛けているけど

元記事を表示

Elasticsearchを含むRspecのリクエストスペックを書いてみた

### 環境

railsとelasticsearchをそれぞれ別コンテナで動かしている

“`yaml
services:
elasticsearch:
image: elastcserachのdockerイメージ
(以下省略)
rails:
image: railsのdockerイメージ
(以下省略)
“`

### テスト用にGemを追加

テスト用のクラスタを別ポート(デフォルトは9250)で立ち上がることができる
https://github.com/elastic/elasticsearch-ruby/tree/master/elasticsearch-extensions

### テスト用のクラスタを立ち上げる

elasticsearchを使うときだけ立ち上げ、終了したら止める

“`ruby
require ‘elasticsearch/extensions/test/cluster’

before(:context) do
Elasticsearch::Extensions::Test::Cluster.sta

元記事を表示

Rails Tutorial 第8章完了

#2020/7/14 0.5時間
#2020/7/15 0.5時間
8.1まで完了しました。
#2020/7/16 0.5時間
||=の意味を理解するのに時間がかかりました。
#2020/7/17 0.5時間
#2020/7/18 2.5時間
土日は時間が取れ、平日より進められました。
#2020/7/19 2時間
1.5時間で8章が終わりました。
残り0.5時間は9章です。

これで8章を完了しました。
所要時間は6時間です。

難易度が上がり、Ruby独特の表記の意味を理解するのに時間がかかりました。
毎日朝に少しずつが出来てきています。

#別のブラウザで開くと「VFS connecion does not exist」エラー
Cloud9でやっています。
注11にある、

>クラウドIDEをご利用の場合は、別のブラウザでログイン動作を確認することをおすすめします。そうでないと、クラウドIDEを開いているブラウザも一緒に閉じるはめになってしまいます。

に従い、環境を
・Cloud9はFirefox
・実行用にChromeブラウザ
としました。

Cloud9から開いたFiref

元記事を表示

初心者がDockerで開発環境構築してみた(Rails&MySQL)

#
### はじめに
現在、就職活動中のプログラミング初学者です。
開発環境にDockerを取り入れる為、いろいろ勉強して自分用のメモとしてまとめておりましたが、折角なら同じ初学者の方の役に立てればと思い投稿させて頂きます。既に多くの方がDockerの環境構築に関する記事を書かれており、そういった記事を参考にさせて頂きながら、メモとしてまとめていましたので、内容はそんなに目新しものではありません。予めご了承ください。また、誤った表現などがありましたらご指摘頂けると幸いです。

## 開発環境

– Ruby 2.6.3
– Rails 5.2.3
– MySQL 5.7
– MacOS 10.15.5

## 前提条件
– [Dockerhub](https://hub.docker.com/)のアカウントを作成している。
– [Docker for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac)をインストールしている。
– Dockerの基礎はある程度抑えている。

Dockerの基本的なこ

元記事を表示

deviceでストロングパラメーターを使いたい!

実は元々deviceでは最初にマイグレーションファイルを生成した時のカラム以外は保存できない仕組みになっている。

ただ後から追加したカラムにもストロングパラメータを適用したい・・・

そんな時はconfigure_permitted_parametersメソッドを使おう!

【記述先】application_controller.rb

“`ruby
ass ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname]) end end ``` devise_parameter_sanitizer.permit(:アクション名, keys: [:フォームなどで送信したデータのキ

元記事を表示

カラムを一発で作成する

普通なら・・・
rails g modelコマンドでモデルと一緒に生成されたmigrationファイルを編集するわけだが面倒くさい。

“`ruby
rails g migration Addカラム名Toテーブル名 カラム名:データ型
“`

あとはターミナルで
rails db:migrateを実行するだけ。あら簡単。

元記事を表示

railsでログインしてないユーザーのアクセスを制限したい!

deviceというログイン機能の実装を簡単にしてくれるGemの導入前提

1.ログインしてるかどうか確かめる
  user_signed_in? メソッドを使う
  true → ログインしています!
  false → ログインしてないです!

2.リダイレクトする

“`ruby
before_action :move_to_index, except: [:index, :show]
“`

“`ruby
def move_to_index
unless user_signed_in?
redirect_to action: :index
end
end
“`

まずルーティングの振り分けでコントローラーに処理がきた途端にmove_to_indexが実行される
そこでfalseが返り値として確認された途端、ルーティングの振り分けなんかお構いなしでindexへ飛ばされる

元記事を表示

binding.pryの使い方【残53日】

binding.pryの使い方がいまいちわかってなかったところ
本日エラー解決のために使用できたので備忘録

新しいチャットルームを作成するというセクションで何度CreateRoomをクリックしてもリロードされる
まあこれはrenderのせいなんだけど
エラー文がでれば解決しやすいものをエラーが出ない
さて困った

ここでbinding.pryの登場

4-1.binding.pry.png
createメソッドのところがどうもおかしいと思ったのでpryにかけてみることに

4-3.binding.pry.pngなぜURIではなくPrefixを使うのか

resoucesメソッドでルーティングを設定すると・・・

“`ruby
resources :tweets, only: [:destroy]
“`

destroyアクションを実行するためのURLわかんないじゃん!
だからPrefixで遷移先を指定した方が便利なんだよ〜

ちなみにURLにidが含まれている時は

“`ruby
Prefix_path(変数.id)
“`

でparamsできちゃいます

元記事を表示

僕はバリデーションをかけたい!!

データベースに制限をかけたい
つまり管理役であるモデルに指示をする

validates :カラム名, 設定したいルール: true

「このカラム名にこのルールを設定したいんだけど?」
という意味。

app/models/tweet.rb

“`ruby
class Tweet < ApplicationRecord validates :text, presence: true end ```

元記事を表示

find, find_by, find_by_sqlメソッドの違いについて

railsの学習を進めていく上で似たようなメソッドが出てきたのでまとめたいと思います。

##findメソッドとは

指定したモデルの`idを引数に設定することでレコードを取得するメソッド`です。

例えば↓↓↓

“`ruby
pry(main)> Tweet.find(1)
(0.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ‘,STRICT_ALL_TABLES’), ‘,NO_AUTO_VALUE_ON_ZERO’), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Tweet Load (0.3ms) SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1 LIMIT 1
=> #

元記事を表示

コントローラー作成は「複数形」で!

必ずsを最後につけるよ!

“`ruby
% rails g controller tweets
“`

もし間違えて単数形で作成してしまったら・・・?

“`ruby
% rails d controller tweet
“`

これで削除できるから大丈夫!

元記事を表示

超初学者向け!resourcesメソッドの書き方!

resourcesを使うと・・・
7つのアクションへのルーティングを一度に自動生成できる!

resources :コントローラー名
※コントローラー名だから小文字でs付き

“`ruby
Rails.application.routes.draw do
resources :tweets
end
“`

特定のアクションだけ生成させたい!
resources :コントローラー名, only: :アクション名

“`ruby
Rails.application.routes.draw do
resources :tweets, only: [:index, :new]
end
“`

特定のアクション以外だけ生成させたい!
resources :コントローラー名, except: :アクション名

元記事を表示

Ruby on Rails 用語まとめ

# プログラミング学びたてやった時に全然理解できてなかった単語やらをまとめていく

##できるだけアルファベット・50音順。徐々に更新していく

##ActiveRecord
データベースの操作にはSQLが使われる。
railsではmodelに**ActiveRecord**が使われていて、rubyでデータベースを操作することができる。
SQLの知識がなくとも**ActiveRecord**のおかげでデータベースの操作ができる

##API
クライアントではなく、プログラムが直接サービスを利用するためのものが**API**。
緯度経度がわかれば、その場所を地図に表示してくれるサービスがあったりする。

##AWS関連
https://qiita.com/ashketcham/items/ad55b24613f3cdaaf114

##bundler
どのgemをどのバージョンで利用するのかを管理してくれる。Gemfileでgemを管理。

##Cookie
これめっちゃ日常で見たことあったやつ!!!
これもセッションと同じ?で「**状態を保存する」**仕組み。
ブラウ

元記事を表示

OTHERカテゴリの最新記事