dev/mom0tomo

技術メモ

つくりたいものメモ

jojobot 今日の日付が mm-dd JOJOの奇妙なカレンダーに登録されている日付と合致すると スプレッドシートのB列のmm-ddと合致すると Slackのチャンネルで その日あったできごとを スプレッドシートのC列のデータを 教えてくれる 朝10時に自動で投稿する bot I…

Railsのrespond_toの働き

読んだもの http://railsdoc.com/references/respond_to 学んだこと respond_toは、クライアントからの要求に応じて、返却するレスポンスのフォーマットを切り替えるメソッド。 respond_to do |format| format.json end 上のように記述し、items.json.slimを…

Rspecで実行順序に依存して落ちるテストの再現にはseed値を使う

読んだもの ruby - Rspecのフィーチャーテストが失敗したりしなかったり - スタック・オーバーフロー 学んだこと テストが落ちたり落ちなかったりする場合、まず問題が出るシード値を特定する。 Randomized with seed 12130 Rspecを実行すると、上のようにSp…

FactoryBotとfixturesの比較

Rspecを使ってテストを書いているが、どちらを使うべきかいつもパッと浮かばないのがイヤなので、まとめた。 読んだもの woshidan.hatenablog.com blog.jnito.com 学んだこと fixtures 固定のデータ(都道府県など)がほしいときに使う。 コントローラのテス…

インスタンスメソッドとクラスメソッドの違い

読んだもの qiita.com 学んだこと あるclass(仮に C とする)があるとして、 class C のインスタンスメソッドは,C のインスタンスをレシーバーとするメソッド class C のクラスメソッドは C 自身をレシーバーとするメソッド である。 違いはこんな感じ。 …

【メモ】ストロングパラメータを使うのはどういうときか

読んだもの railsguides.jp 学んだこと 結論 基本的にPOSTやPUTでリソースに変更を加えるときに使う。 ストロングパラメータの目的は、Active Modelに不適切な値が入れられ、それを公開してしまうのを防ぐこと。 そのため、POSTやPUT以外はまず使わない。 ス…

tryとtry!とぼっち演算子(&.)でレシーバがnilのときのエラーに対処する

読んだもの sakurawi.hateblo.jp qiita.com 学んだこと tryとtry!とぼっち演算子(&.)は、レシーバがnilのときのエラーに対処する為に使う。 try user.try(:name) レシーバであるuserがnilでないなら、メソッドを実行する。 レシーバとは、hoge.methodと書…

ビジネスロジックはモデルに書く、とはどういうことか

コードレビューで指摘を受けたので改めて調べてまとめた。 読んだもの https://wa3.i-3-i.info/word13666.html ビジネスロジックとは - IT用語辞典 学んだこと ビジネスロジックとは アプリケーション固有の処理やルールを記述したもの。 「ビジネスロジック…

form_withを使って検索フォームをつくる

form_withを使ってこんな検索フォームを作った。 user/index.html.slim = form_with model: User.new do |form| = form.label :name, '名前' = form.text_field :name, value: (params[:user][:name] if params[:user]) = form.submit '検索する' users_cont…

form_forとform_tagはform_withへ統合された(Rails 5.1)

読んだもの Ruby on Rails 5.1リリースノート | Rails ガイド 学んだこと なんとRails5.1から統合されていた。マジカヨ... form_for : Modelに基づいたformを作るときに使う form_tag : Modelに基づかないformを作るときに使う(検索フォームなど) と覚えて…

Rubyのattr_accessorとは

読んだもの Rubyのattr_accessor, attr_reader, attr_writerとは何か -- ぺけみさお 学んだこと attr_accessor とは、インスタンス変数にアクセスするためのメソッドを定義するメソッドのこと。 プライベート変数に対するセッタやゲッタを自動的にセットして…

Railsのバリデーションエラーを日本語化する

読んだもの Railsのバリデーションエラーのメッセージの日本語化 学んだこと 下記の手順で設定する。 1.以下のgemをインストールする gem rails-i18n 2.config/application.rbに設定を追加する config/application.rb config.i18n.default_locale = :ja 3.ja…

Railsのモデルと一対多のリレーションのまとめ

読んだもの Rails4で1対多のリレーションをモデルに実装する - Rails Webook Active Record の関連付け (アソシエーション) | Rails ガイド 学んだこと 下記のようなUser has many Itemsという関係のモデルを考える。 user.rb class User < ApplicationRecor…

インスタンスメソッドの理解

ずっともやっとしてた部分を整理したらアハ体験があったのでまとめる。 こんなモデルがある場合。 models/user.rb class User < ApplicationRecord has_many :items end models/item.rb class Item < ApplicationRecord belongs_to :user validates :user_id…

Rails 5.1以降 でjqueryを使う

Rails5.1から、デフォルトではjqueryに依存しない仕様になった。 Ruby on Rails 5.1リリースノート | Rails ガイド jqueryを使うためには下記の手順を踏むこと。 Gemの追加とbundle update Gemfileに gem "jquery-rails"を追加し、bundle updateを実行する。…

Railsアプリを作るときの共通パーツの設定

初期設定はこちら。 mom0tomo.hateblo.jp 共通レイアウトはapp/views/layouts/ に配置する。 headタグのパーツ app/views/layouts/application.html.erb <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>アプリ…</meta></meta></meta></head></html>

Railsの便利なコマンドと設定

新規アプリケーション作成するとき DBの種類を設定する $ rails new {app_name} --database=mysql テストを作成しない $ rails new {app_name} --skip-test bundle installするとき gemのインストールパスを指定する $ bundle install --path vendor/bundle …

モデル名と異なるアソシエーション名を使う場合の決まり

Rails tutorialでも出てくるuserがfollowings/followers(どちらもuserテーブルを使う)を持つ関係を例にまとめる。 models/user.rb class User < ApplicationRecord # followingsのアソシエーション has_many :relationships has_many :followings, through…

Railsのアソシエーションの仕組み

理解するのにものすごく時間がかかったので、まとめておく。 アソシエーションとは 簡単にいうとモデルを参照するためのメソッド。 例は下記に示す。 メソッドはふだん使うときに書くが(当たり前)、アソシエーションは使い道も書き方も決まっていてるので…

HerokuでgitpushしようとするとPermission denied (publickey).になる

読んだもの opamp.hatenablog.jp 学んだこと 会社でつかっていたリポジトリをクローンして herokuに変更をpushしようとしたところ、下記のエラーになった。 $ git push heroku master Warning: Permanently added the RSA host key for IP address '50.19.85…

find_or_create_byとfind_or_initialize_byの違い

読んだもの blog.hello-world.jp.net 学んだこと 両者の違いは下記の通り。 find_or_create_byだと新規作成して保存 find_or_initialize_byして保存はしない 保存しないことのメリットは、新規作成するときのみ併せて何かする、という処理ができること。 fin…

Herokuアプリを削除する

git remoteから削除するのを忘れがち。 Heroku上のアプリを削除 $ heroku apps:destroy --app { app_name } git remoteから削除 $ git remote rm heroku // 確認する $ git remote -v

RailsのアプリケーションをHerokuにデプロイする流れ

たまにしか一連の流れをやらないので、いつも何かを忘れてしまう。 まとめておく。 コマンドラインツールのインストール $ wget https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli-linux-x64.tar.gz -O heroku.tar.gz $ sudo mkdir -p /…

Rspecで"You must pass an argument rather than a block...." エラー

読んだもの www.d-wood.com 学んだこと matcherにはブロックを受け取れるものとそうでないものがある。 例えば以下のように書くと表題のエラーになる。 context 'とある場合' do it '名前がほげほげであること' do expect { described_class.new(user).name …

多対多のリレーションをhas_manyでモデルに実装する

Railsでは、ActiveRecordのhas_manyかhas_and_belongs_to_manyを使うことで、多対多のテーブルどうしの関連をモデルに実装できる。 基本的には拡張性のあるhas_manyを使った方がよい。 マイグレーションファイルをつくる Twitterクローンの例をもとに、user…

【解消法】has_secure_passwordを使おうと思ったらbcryptでエラー

こんなエラーが出た。 cannot load such file -- bcrypt bcrypt gemでよくあるエラーらしい。 読んだもの https://github.com/codahale/bcrypt-ruby/issues/142#issuecomment-291345799 学んだこと 解消法 $ gem uninstall bcrypt $ gem uninstall bcrypt-ru…

Visual Studio CodeでGoを書くために入れているプラグイン

Go

GoLandを買うか迷ったけど、無料で使えるVSCodeにした。 業務ではRailsしか書かないのでRubyMine、GoはVSCodeと言語でエディタを分けて使っている。 さらっと文章やyamlを書くときは一番手に馴染んでいて軽いSublimeがやっぱり使いやすい。 VScodeのGo関連プ…

Homebrewで管理しているElasticsearchにプラグインをインストールする

読んだもの www.elastic.co 学んだこと Elasticsearch::Transport::Transport::Errors::BadRequest:[400] No handler found for [400] No handler found for analysis-icu などというエラーが出たので、analysis-icuをインストールしようとした。 公式だと $…

【メモ】herokuにRailsアプリケーションをデプロイするときのコマンド

うっかり忘れがちなので自分用にメモにまとめておく。 // ログイン $ heroku login // アプリケーション作成 $ heroku create my-rails-app // 作成されたか確認 $ heroku apps my-rails-app // herokuにpush $ git push heroku master // pushされたか確認 …

Rails kaminariでページネーションを実装する

読んだもの github.com 学んだこと kaminariの使い方はすごく簡単。 tasks_controller.rb def index @tasks = Task.all.page(params[:page]) # @tasks = Task.all <- kaminari利用前のコード end index.html.erb <h1>タスク一覧</h1> <ul> <% @tasks.each do |task| %> <li> <</li></ul>…