プログラミングのメモ帳

自分のメモとして残したいアウトプット

2019-04-01から1ヶ月間の記事一覧

いいね機能のDB設計

よくある「いいね機能」のDB設計を考える。 ツイッターで言えばいわゆる「ファボ」機能。 前提条件 ・UserモデルとPostモデルが存在する ・User has_many posts という関連付けが行われている ER図 Like Modelを作る Postにいいねしたユーザー一覧を入れると…

Userモデルに紐付くModelの作り方

かなり基本の部類に入るとは思うがUserモデルに紐づくModel (例えばPostだったりTaskだったりTweetだったりする) の作り方を確認してみる Modelの生成 まずはgenerate(カラムはお好み) $ rails g Model Post title:string content:text user:references us…

特定のvalidationをスキップする

WEBサービスを作っている際に、 「passwordのバリデーションが邪魔だな、、、、」と思う場面がありました。 具体的にはユーザーのプロフィールを変更する時にパスワードを入力せずに更新したい、 つまりパスワードのバリデーションのみ適用無しにしたい、と…

Railsのメッセージを日本語化する

Railsで表示されるメッセージ(エラーや曜日等)はもちろんデフォルトで英語です。 これらのRailsで用意されているメッセージを日本語化する。 I18nはRails自体に同梱されているのでGemfileに追記は不要。 流れとしては 1. locale: ja 用の翻訳ファイルをダ…

コミットメッセージの良い習慣を身につける

コミットメッセージの良い習慣を身につける チーム開発を前提として他の人が見たとき、または未来の自分が見た時に 分かりやすいコミットメッセージをつけるべきである。 基本としては下記の3点を抑える ・3行構成でコミットメッセージ書く ・内容は「更新…

Railsで検索フォームを実装する(ransack)

Ruby on Railsで検索フォームを実装する方法。 ransackというgemを使って実装できる。 ちなみにransackは「くまなく探す」という意味らしい。凄い検索してくれそう。 githubレポジトリはこちら(https://github.com/activerecord-hackery/ransack) gem 'ran s…

Railsルーティングのあれこれ(routes.rb)

Railsのルーティングの指定方法に色々種類があったので 自分用に整理する 基本形 get '/login', to: 'sessions#new' httpメソッド 'パス', to: 'コントローラー#アクション' という書き方。 CRUD機能を一括で指定 resources :users resources :コントローラ…

RSpec+FactoryBotの書き方の基本

前提条件 RSpec、FactoryBotを導入している Railsは5.1以降でありCapybaraが元々入っている 書き方 describe '機能名' do context 'ケース名' do it 'テスト内容' do #テスト処理内容 end end end これが基本形。 新規編集機能のテストを例としてあげると 機…

DB登録にはStrong Parameterを必ず実装する

RaisのDB登録の基本。 Strong Parameterの設定のメモ。 マスアサインメント対策で必ず実装するべし(むしろ実装しないとエラーがでる。) <例> def create user = User.new(user_params) user.save end ... private def user_params params.require(:user).pe…

Ruby on Railsのテスト用ライブラリメモ

RSpec Railsのテストフレームワークは大抵の場合MinitestかRSpecどちらかを使用する。 MinitestはRailsに標準で搭載されていてすぐに使い始めることができる。 しかし現場ではRSpecを使用しているケースの方が多いらしいのでこちらを選択 Capybara ブラウザ…

autolinkを導入してリンクを自動挿入する

Railsで表示される文字列のうちURLにaタグを自動挿入したい場合にはautolink gemを導入する。 Githubレポジトリ:https://github.com/tenderlove/rails_autolink 'app/Gemfile' gem 'rails_autolink' $ bundle これでauto_link()メソッドが使えるようになる。…