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

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

ActiveRecordから特定のカラムの配列を取得したい

#はじめに

Railsでアプリを作っている際に、whereで絞ったレコードの特定のカラムの配列を取得したい時がありました。

例えばusersテーブルのgenderがmaleのnameのみの配列を取り出したい!みたいな。

## 最初の実装

空の配列を作って、繰り返し処理で配列に入れていくみたいな感じです。

~~~ruby:users_controller.rb
male_names = []

User.where(gender: “male”).each do |user|
male_names << user.name end ~~~ これでこんな感じで配列が取得できます。 ~~~ ["太郎", "花子", "次郎"] ~~~ しかしなんかダサいしめんどくさいなぁと感じていました。 ## pluckというメソッドを見つける ActiveRecordのメソッドを色々見てるとpluckというメソッドが有りました、日本語でむしるという意味らしいです。 引数にカラム名を指定して使います。 ~~~ruby:users_controller.rb male_

元記事を表示

Devise/OmniAuthを使ってSNSログイン実装しました系記事で気になる3つのこと

ritouです。

OAuth?‍♂️のパトロールによく引っかかる投稿としてこんな感じのがあります。

* Rails で Twitter や facebook とかのアカウントを使ったSNSログイン/ソーシャルログインを実装します!
* devise や omniauth を使います!
* DBのマイグレーション、エンドポイント追加、コールバックの処理、こうして、こう!こうして、こう!
* 動いた!!!

みたいな記事です。

[“devise omniauth” で検索するともりもり出てきます。](https://qiita.com/search?q=devise+omniauth&sort=created)

似たような記事もあるので、誰かが誰かの記事を参考にして書いてそれをまた誰かが…と言うもはや伝統芸能の類のようにも見えてきますが、これ系の記事で気になる点をいくつか残しておきますので今後書く人は参考にでもなさってください。

## SNSアカウントから内部のユーザーを引く時のキー

大体の記事は大丈夫ですが、ごく稀にSNSアカウントから取得したメールアドレスをキーにして内

元記事を表示

ancestryを用いたseedデーター作成について

某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

## railsのseed機能を用いて、カテゴリーをデーターベースにまとめて保存した。

 railsには、**「ancestry」**という非常に便利なgemがあります。
 ancestryの機能について、簡単に説明させていただきますと、ancestryとは日本語で**「先祖」**という意味で、その名の通り家系図のような繋がりを持つデーターベースを利用するときに真価を発揮します。
 ※導入やモデル、マイグレーションの作成については割愛します。

 わかりやすく言うと、「波平」というデーターがあって、その配下には「サザエ」、「カツオ」、「ワカメ」とうデーターがあり、さらに「サザエ」の配下には、「タラオ」、 **(注:以下妄想です)**「マグ郎」「カクレクマノ美」という繋がりのデーターベースがあったとします。(ちなみにカクレクマノ美はなぜか、どう見ても黒人とのハーフだそうです。不思議ですね)

 例えば

元記事を表示

AWSを用いてrailsアプリをデプロイするプロセスを頑張って噛み砕いてみるvol.2

## 近況報告
連投ではありますけど,近況報告のネタはたくさんあります。ついさっきテックキャンプの最終課題発表会が終わり,無事転職活動に進めることになりました。ほんとメンバーに助けられた〜。これからは今持ってる力を磨きながらぶつかっていく戦いが続きます。頑張ります。

#今回の目的
・インフラ整備での各アクションの言語化
・コードを単に打っているだけでは理解しきれないし,他に応用できないので言語化して整理
・AWSでアカウント作成,ほか諸々の準備は割愛してターミナルでの操作をメインに

##おおまかな流れ
本番環境用のデーダベース作成(MySQL)
アプリケーションサーバーの準備(githubの認証)

##事前準備
[前回の内容](https://qiita.com/aaabb6211/items/6194fa53f29061dc5444)の続き

### 本番環境用のデーダベース作成
EC2は本番環境を整備して土地を提供してくれるけど,そこに建てる建造物や木材は持ち込みです。開発環境のようにデータベース,アプリケーション,それに加えて,遠隔操作するためのロボット(ここではNginx

元記事を表示

【Rails】クッキー・セッションからログイン機能までを改めておさらいしようのコーナー

わし「クッキーとかセッションとか記憶トークンとか意味ワカンネ( ᵕ̩̩ㅅᵕ̩̩ )」

Railsチュートリアル8,9章が急に本気出してきたので改めてセッションやらクッキーについてまとめておきます…
ログイン機能を実践的に書くとかはしないのでよろしくな!

##セッションとクッキーの違い
####HTTP通信はステートレス
というのは恐らくどんな教材にも載ってますよね。
HTTP通信は過去にした通信をすべて忘れてしまいます。
あなたがログインフォームに打ち込んだメールアドレスやパスワードも、本来なら次のページに移る頃には無かったことになってしまうのです。
ではどのようにしてログイン情報を保存しているのでしょうか。

####クッキーは保管庫・セッションは接続
HTTP通信はステートレスですが、ブラウザにはしっかりと情報を保存させておく場所が用意されております。
それが**クッキー(cookies)**です。
ブラウザのクッキーに、ログイン情報(ユーザーIDなど)を格納させておくことで、
クライアントとサーバーサイド間でクッキーの情報を照合し、ログインしているのかどうかを確認することがで

元記事を表示

【備忘録】フォルダとディレクトリの違いについて

## はじめに

『ディレクトリ = フォルダ』と思っていたのですが、厳密に言うと違う!ということを知り、何が違うのか気になったので深ぼってみました!

### 目的
フォルダとディレクトリの違いを説明できるようになろう!?

## フォルダとディレクトリを簡単に一言でまとめる

##### マウスなどで操作するGUIではフォルダ、ターミナルなど文字で操作するCUIではディレクトリという
どちらも『ファイルを保管する場所』という点で基本的には同じものなので言い方の違いなんだな〜という認識でオッケーです!?‍♀️

※[GUIとCUIについて](https://wa3.i-3-i.info/word1373.html)

## もうちょっと深ぼってみる

### 呼び方について

UnixやMS-DOSなどのOSや、3.1以前のWindowsなどでは「ディレクトリ」と呼び、Mac OSでは「フォルダ」と呼んでたみたい。

### フォルダについて
ファイルやOSの機能などをまとめて格納・分類することができる名前の付いた保管場所のこと。
『オブジェクトのいれもの』という意味がある。

##

元記事を表示

Ruby on Rails on Docker on EC2(AmazonLinux2)

# はじめに

RailsのアプリをさくっとEC2で動かしてみたいっていうことがあったので、その時の手順をメモ書き的な感じで残しておこうと思います。

サーバーにRubyをインストールしたりなどの環境構築が面倒だったので、RailsもNginxもMySQLもDockerで環境構築してみました。

## Docker導入の準備

### 1. Rails用のDockerファイルを作成する

RailsアプリのディレクトリにDockerfileを作ります。

~~~
sample_app user$ touch Dockerfile
~~~

~~~Docker:Dockerfile

FROM ruby:2.6.5
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get upda

元記事を表示

turbolinksはjsにとって”良薬口に苦し”だった話

#困り事はタイトルの通りです。
webサイト、webツール様々開発する中でwebツール系をwebサイトの雰囲気で作っていると、この障壁にぶち当たりました。
turbolinks使用時にjavascriptが発火しないなどの記事は山ほどあったのですが、発火しすぎるという記事は少なかったので書いてみます。

##本記事を読む対象の人
– rails環境にて、turbolinksとjsを併用する時に思い通りの動きにならない。
– ページ毎に記述したいjsファイルの読み込みが呼ばれなかったり、多重にリッスンしてしまう。
– ‘page:before-change’などよく分からない独特な書き方を覚えるのがめんどくさい、けどpjaxの恩恵が欲しい。

##具体的な問題

“`js:application.js
//= require jquery
//= require jquery.turbolinks
//= require rails-ujs
//= require turbolinks
//= require common
//= require cropper.min.js
//=

元記事を表示

[Factorybot]親子関係を持ったデータを作成する方法

### belongs_toのデータを作る場合
`association`を用いる
https://qiita.com/metheglin/items/47116ccbdb26aa00e034#association

### has_manyのデータを作る場合
`callback`を用いる
https://qiita.com/metheglin/items/47116ccbdb26aa00e034#callback

### has_oneのデータをつくる場合
https://qiita.com/yuku_t/items/1ec17c027ad30ce0a388

元記事を表示

【Docker & webpacker & Rails6】Uncaught Error: Cannot find module ‘uikit’ の解決法

# 環境

#起こった現象
Uikitで実装していたデザインが突然反映されなくなった
スクリーンショット 2020-04-23 20.19.43.png

# 原因
おそらくwebpackerのコンパイルが原因…?
わかる方いらっしゃいましたら教えて下さい:wink:

# 解決方法

“`terminal:terminal
docker-compose down && docker images -aq | xargs docker rmi
“`

“`terminal:terminal
docker-compose build
“`

“`terminal:terminal
docker-compose up
“`

元記事を表示

Ruby on Rails 〜同率順位も含めたランキング機能〜

今回はいいね順に投稿内容を表示する方法を書いていきたいと思います
#前提
いいね機能を実装していること

https://qiita.com/MitsuguSueyoshi/items/18fa5e49a27e727f00b4
こちらの記事を参照にランキング機能を実装していること

上に載せている記事のcontrolleの記述では3番目まで投稿されるようになっているので今回は同率順位をわかりやすく表示するためにlimitの値を7にします

変数の値は自分のプロダクトに添って変更しました(ご了承ください?‍♂️)
#はじめに

まず<% @all_ranks.each.with_index(1) do |ranking, i| %>この記述によってそれぞれのいいねされた投稿内容がいいね順に並びます<%= ranking %>としてみれば# よくわからない文字の羅列が出力されますが<%= ranking.body %>などにしてみるといいねが多い順に投稿されることが分かりますか?ですがいいねが同数の場合は先に投稿された内容が上の順位に来て

元記事を表示

AWSを用いてrailsアプリをデプロイするプロセスを頑張って噛み砕いてみるvol.1

### 近況報告
 やあ,転職活動を目前にして,ついに個人アプリのデプロイを行なっていきます。テックのカリキュラムは離れると見られなくなるのでこういう場所に自分のやってきたことをメモできたらなあと思っています。個人アプリに関してはDockerを導入して完成としたかったのですが,時間的にとりあえずデプロイを行うことにしました。テックエキスパートのカリキュラムを元に書いてるのでそれと互換性があります。この記事は後々制限つけようかな。
#今回の目的
・**インフラ整備での各アクションの言語化**
・**コードを単に打っているだけでは理解しきれないし,他に応用できないので言語化して整理**
・AWSでアカウント作成,ほか諸々の準備は割愛してターミナルでの操作をメインに
## おおまかな流れ
・本番環境をリモートで操作する準備
・本番環境の構築
・rubyインストール
###事前準備
awsのアカウント作成
インスタンス作成
インスタンスとEPアドレス紐付け
セキュリティでポートのスタンバイ
キーペア作成

以下キーペアDL後から書いていきます
### 本番環境をリモートで操作する準備

“`

元記事を表示

Ruby on Rails(学習記録)

“`
・ rails new アプリケーション名

・ rails server

・ rails generate controller コントローラー名 アクション名

・ get “URL” => “コントローラー名#アクション名”

・ <% %> / <%= %>

・ @変数
  // ビューファイルでも使用可能になる
  // 同じクラスの異なるメソッド間で共通して使用可能

・ rails g model モデル名 カラム名 データ型
  // モデル名はテーブル名(複数形)の単数形にする
  // <データ型> :text :string :integer 等
・ rails db migrate

・ rails console / quit

・ データの追加
  - newメソッドでPostモデルのインスタンスを作成, postsテーブルに保存
  - 保存はsaveメソッドを使用
  - Post.first, Post.all

・ <%= yield %>
  // 各ビューファイルは、<% yield %>に代入され、application.ht

元記事を表示

メル○リ風 ドロップダウンリストの作成

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# ヘッダーから、ドロップダウンリストを用いてカテゴリーを選択できるように実装した。
                     **動作イメージ**

![037dccf322add94d86b341748e3fa647.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/d4aa2005-9c3f-fb0a-7371-8d7ed4e79675.gif)

## 前提条件
ancestryにより、カテゴリーの親から孫まで紐づいている。

## 実装要件
– サーバー
1. クリックしたカテゴリーに紐づく商品を一覧表示する。
2. 親カテゴリー、もしくは子カテゴリーがクリックされたら、紐づく子カテゴリ、孫カテゴリーの商品も全て一覧表示する。
– マークアップ
1.

元記事を表示

アカウント登録で使用したカスタムバリデーションと正規表現のメモ

以下のような、入力フォームによくある条件でバリデーションかけたいときのメモ
・アカウント名は半角英数記号もしくは以下の記号のみ有効( _ – . )

“`ruby:models/user.rb
# バリデーションを自作
def check_account_name
if account_name !~ /^[a-zA-Z0-9-_\.]+$/
errors.add(:account_name, “の内容が不正です”)
end
end
“`

## 正規表現部分解説

### メタ文字
“`
( ) [ ] { } . ? + * | \
“`
上記の記号はメタ文字といい、正規表現内で特殊な働きをする。

## !~
正規表現のメソッド =~ の否定。マッチが失敗したらtrueを返す。
上記のコードでマッチが失敗したらバリデーションに引っかかるように。

## /
/で始まり/で終わっているが、これは正規表現の条件はここからここまでだよという範囲を明示するためのもの。
調べてみると/は何の意味も持たない記号で、実際はどの文字で

元記事を表示

bundlerのバージョンが2.0.1以上だとDockerでエラーが出てしまう場合の対処法

## はじめに
既存のRailsアプリの開発環境にDockerを導入しようとしたところ、bundle installがなかなか上手くいかずに困ったので、その時の対処法について書こうと思います。

今回は、表題の件についてのみ書きますので、既存のRailsアプリにDockerを導入する方法については割愛いたします。

## 環境
– Rails 5.2
– Ruby 2.5.1
– bundler バージョン 2.1.4

## 今回のケース
DockerでRailsの環境を構築する際に、bundlerのバージョンが2.0.1以上だとbundle installに失敗してしまうようです。

こちら、bundle installが上手くいかなかった時のDockerfileになります。

“`:Dockerfile
※失敗バージョン

FROM ruby:2.5.1

RUN apt-get update && \
apt-get install -y mysql-client nodejs vim –no-install-recommends && \
rm -rf /

元記事を表示

ActiveRecord6 の dirty attribute methods (will_save_change_to_* とか)の挙動一覧

[ActiveRecord::AttributeMethods::Dirty](https://github.com/rails/rails/blob/v6.0.2.2/activerecord/lib/active_record/attribute_methods/dirty.rb)モジュールで定義している以下メソッドの挙動をまとめました。

– `*_before_last_save`
– `*_in_database`
– `saved_change_to_*`
– `will_save_change_to_*?`
– `saved_change_to_*?`
– `*_change_to_be_saved`
– `saved_changes?`
– `saved_changes`
– `has_changes_to_save?`
– `changes_to_save`
– `changed_attribute_names_to_save`
– `attributes_in_database`

※順番はテキトーです

以下のコードを1行ずつ実行し、各時点の dirty meth

元記事を表示

SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜

SPAのログイン周りについて、「これがベストプラクティスだ!」という情報があまり見当たらないので、様々な可能性を模索してみました。
いろいろな状況が想定され、今回記載する内容に考慮の漏れや不備などがありましたら是非コメントでご指摘いただきたいです!特に「おすすめ度:○」と記載しているものに対しての批判をどしどしお待ちしております!
この記事でおすすめしているものであっても、ご自身の責任で十分な検討・検証の上で選択されてください。

# 前提
想定しているAPIは、

– ログイン外のAPIにはPOST/PUT/DELETEのものがなく、GETのみ
– GETのAPIにはDBを更新するなどの操作がない

とし、そのためログイン外ではCSRFを考慮しなくてよい、
という前提で話を進めます。

また、XSSに関しては常に対策は必要なのですが(フレームワーク側が自動的にしてくれる部分もある)、認証周りに関係すること以外はあまり記載していません。

#### Cookieについて
– httpOnly属性: trueだと、JSからCookieを参照できなくなる。
– secure属性: tru

元記事を表示

RSpecでlet_it_beを使って、作成されるレコード数を減らす

# let_it_beを使うと作成されるレコード数を減らすことができる

## 解説

こういうbooksテーブルがあるとする

“`ruby
create_table “books”, force: :cascade do |t|
t.string “title”
t.string “description”
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`

factoryを用意します

“`ruby
FactoryBot.define do
factory :book do
title { ‘hoge’ }
description { ‘fuga’ }
end
end
“`

こんな感じのテストがあるとします

“`ruby
RSpec.describe do
describe ‘Book’ do
let!(:book) { create(:book)

元記事を表示

初心者がhamlの書き方まとめてみた

## はじめに
最近、railsの勉強をしています。少し前までは、`erb`を使っていたのですが,
`haml`に最近切り替えたので、自分なりにまとめてみたいと思います。
文章ところどころ、おかしいところあるかもしれませんがご了承ください。

## hamlとは
HTML abstraction markup language
HTML/XHTMLを生成するためのマークアップ言語
HTMLを効率的に生成するための記法。

## hamlの書き方
* HTMLのタグを使いたい場合

下記は、pタグを使って、hogeという内容を出力

“`haml:
%p hoge
“`
* クラス,IDを定義したい場合

“`html:

hoge
huga

“`
:arrow_double_down: hamlに変換します。

“`haml:
.hoge hoge
#huga huga
“`

* Rubyの文法、変数を使いたい場合

“`haml:
– hoge = “fuga”

– @ta

元記事を表示

OTHERカテゴリの最新記事