rails

RailsのRSpecテストにおける用語整理

RSpec…RubyにおけるBDDのためのテスティングフレームワーク BDD…Behavior(振舞)をまず作り、その後にプロダクトコードを書く開発手法 Capybara…RSpecと組み合わせて使うE2Eテスト用フレームワーク。ブラウザ操作などをシュミレーションできる。 E2E…End to…

【Rails】カラム追加して、既存のレコードに特定の条件を付けてそのカラムを埋めるメモ

bookseriesという本のシリーズを管理するテーブルがあります。 このテーブルは本の様々な情報を持つbookテーブルと紐付いています。 bookseriesに出版社名のカラムであるpublisherを追加します。 このカラムはbookにある出版社名のカラムと同じレコードを持…

【Rails】S3とcarrierwaveの連携メモ

以前書いたS3で簡単なWebページを作るメモから参照し、S3を作成しておく。 以下S3を作成した前提でのRails側でのメモ IAMユーザー作成 S3を操作するIAMユーザーを追加する。 ユーザー名を適当に、アクセスの種類は「プログラムによるアクセス」 アクセス権限…

【AWS】EC2+RDSでRailsアプリを動かすメモ

あくまで学習の一環としてのメモ。 VPCの作成 まずはVPCの作成。 CIDRブロックは10.0.0.0/16で。 EC2用のサブネットを作成 EC2用なので、外部と通信できるサブネットを作る。 CIDRブロックは10.0.0.0/24 インターネットゲートウェイを作成 EC2用のサブネット…

docker-composeの書き方メモ

とりあえず初心者なりに、用語を調べながらなんとかdocker-composeを理解できそうです。 これからも使うことになるので、メモとして説明を入れながら書いてみました。 version: '3' #docker-composeのバージョン指定 services: #各コンテナの設計を書いてい…

【Devise】Twitter連携ログイン時、メール認証を回避する。

Twitter連携を使用し、ログインした場合Twitterを伝って持ってこれる情報にはメールアドレスはありません。 なので認証するときはダミーのメールアドレスを生成し、それをメールアドレスとして設定していたのですが、Deviseのメール認証をオンにしているとダ…

Githubから特定のファイルの履歴を消すメモ

本来、環境変数として設定してプッシュしなければいけなかったファイルを誤ってプッシュしてしまったときなど、そのファイルの履歴はずっと残ってしまうので、APIのKeyやらが全世界に公開されてしまいます。 先日その過ちを消すことに成功したのでメモ。 ま…

【Rails】form_withで作成したselectのoptionタグに初期値を設定する。

f.selectで作成したセレクトボックスを使って検索機能を採用しているのですが、検索するたびにセレクトボックスの値が初期値になると何かと不便です。 選択した値をページが切り替わっても保持するため、初期値にそのセレクトボックスのparamsを代入し、結果…

【Rails】中間テーブルで2つのidの組み合わせ重複したとき無効にするテストを書く

バリデーションを書く validates :user_id, :uniqueness => {:scope => :book_id} 一応migrationファイルにもt.indexを使ってDB側で同じ組み合わせが重複しないようにはしているけど、バリデーションとしてエラーを出せるように書いてみた。 こうすることで…

【RSpec】user_specのメモ

昨日初めてRSpecに手を出しました。 そこで気がついたんですが、もっと早くやっておけば良かったと思います。 多分そこらへんはコードとテストをどっちを先に書くかみたいな話にもなるとは思うのですが、僕自身、ポートフォリオを作成中で、最低限の機能を追…

【Rails】楽天BooksAPIで新刊を抽出する

残念なことに楽天APIでは入力パラメーターに発売日を指定して検索をかけることはできないみたいなので、無理やり新刊を検索するコードを書きました。 入力可能なパラメーターはいくつかありますが、その中でも出版社毎に新刊を抽出します。 def download @pa…

【Rails】ActiveRecord:Relationをeach do内でまとめる

特定の検索ワード等が複数あって、それをeach do内でwhereを用いて引っ張ってきたものを、ある配列にまとめる処理を繰り返す感じになります。 @books = [] @findbooks.each do |book| comics = Book.where("title LIKE ?", "%#{book}%") comics.each do |com…

【Rails】formのselectにclassが設定できない問題

form_forで書いていたものをform_withに修正したところ、classに書いたBootstrapが反応しなくなりました。 f.select :month, options_for_select(['10', '11', '12']), class: "form-control" 本来ならform-controlを指定したので、デザインがBootstrapのそ…

【Rails】Deviseを使用したユーザー登録認証メールの設定

Deviseのインストールやログイン周りの設定は既に完了している前提。 ユーザー登録時に、登録したメールに認証用のリンクを送信し、本当にメールが合致するかどうかの認証を作ってみます。 user.rbに追記 devise :database_authenticatable, :registerable, …

【Rails】かんたんログイン機能の実装

なんらかのWebアプリを作るとき、面接で使うポートフォリオ用の場合だと、かんたんログイン機能というワンクリックでログインできる機能があると何かと便利です。 ということで簡単にかんたんログイン機能を実装してみたので、記録しておきます。 既にログイ…

【Rails】簡単なAjax(非同期通信)を実装する

いいね機能を例に簡単にAjax機能を追加してみます。 Ajaxの概要 サーバーと通信したときに、ページ遷移を行わず指定した一部分だけを変更する処理のこと。 何らかのボタン等を押して、リクエストを送ったときに 本来ならば設定したerbやhamlをレンダリングす…

【Rails】deviseとomniauthでTwitterログイン機能を作るメモ

既にdeviseで普通のログイン機能は作っている前提のメモ。 Gemのインストール gem 'devise' gem 'omniauth-twitter' $ bundle install TwitterAPIkeyを入手するためにDeveloperに登録 https://developer.twitter.com/en/apps 初めて利用するときは、とりあえ…

【Rails】ハッシュを並び替える

ハッシュを並び替える。 基本、sortメソッドを使用する。 使い方 ハッシュのキーをソートするとき hash.sort ※降順の場合は hash.sort.reverse と、後ろにreverseを付ける。 ハッシュの値でソートするとき hash.sort_by{ | k, v | v } sort_byを使う。 kがキ…

Railsで多対多のお気に入り機能を作成する

もう何度も作成していますが、未だにややこしく、ググったりしているので一度まとめようと思いました。 まず、小文字大文字、複数形などが整理できていないときは確認する。 qiita.com 中間テーブルの作成 rails g model Subscribe user:references book:ref…

APIから持ってきた日付データが文字列型だったときの解決策

楽天BooksAPIからは本の発売日を文字列として抽出することができます。 しかし実際に扱うとなると文字列だと使い勝手が悪かったので、あくまで自分のアプリを作成する上での解決策を記しておきます。 結論から言うと、正規表現で弄って、int型にするだけ。 …

BootstrapのCollapseをeach do内で扱う

下記のようなBootstrapのCollapse(折りたたみボタン)を利用する場合、 折り畳み~Bootstrap4移行ガイド each do内だと、上のボタン式例でいうcllapseExampleの部分はcollapse<%= key %>などとする必要がある。 <% book.each do|key| %> <p> </p>

【Rails】belongs to関連のデータがsaveされないとき

ちょっと悩んでしまったので備忘録。 結論から言うとデフォルトでnilは許可されていないのが原因でした。 belongs_to :book, optional: true というように後ろにoptional: trueをつけることでnilを許可させることが出来ます。 どうやらrails5からはデフォル…

【Rails】オブジェクトの理解

オブジェクトとは 現実世界における”モノ” Railsにおける処理をするための万物。 オブジェクトの例 文字列 ""で囲ったもの 数値 そのまま。数。 object_id オブジェクト.object_idとすることで、object_idという固有の番号を見ることができる。 すべてのオブ…

【Rails】管理者ユーザーの作成

簡単な管理者ユーザー機能を作ったメモ。 まずは既存のusersテーブルにカラムを追加。 rails g migration AddAdminToUsers migrationファイルを編集する。 class AddAdminToUsers < ActiveRecord::Migration[5.2] def change add_column :users, :admin, :bo…