Rails初心者がハマったポイントを淡々と書く
目次
- 目次
- 筆者スペック
- 共有のプライベートリポジトリを無料で作る
- GitLabとSlackの連携
- rbenvで最新版のrubyを入れる
- 既存のDBからschema.rbを自動生成する
- Gemfileに書いた gem 'mysql2' が通らなかった
- jQueryはrailsの標準装備では無くなった
- 画面遷移時にJSが動かない
- redirect_to に続けて書くflashが動かない
- controllerに書いたメソッドをviewで使う
- ARで対応するレコードの存在を前提とするコードを書いているとnilで落ちる
筆者スペック
- 業務でRailsを実質2-3ヶ月程度触れている
- DBのスキーマ変更にはmigrationを打つと良いことを知っている程度
- ActiveRecordよくわからない
- PHPは1年ちょっとぺちぺちしてる
共有のプライベートリポジトリを無料で作る
みんな大好きGitHubでプライベートリポジトリを作るのは有料(学生は無料)なので代替案が欲しい。
BitBucketとか色々あるけど、GitLabを採用。正直あんまり調べてないけど、機能充実しているし十分満足。
- GitHubに近いインターフェース
- 無料でプライベートリポジトリをグループでも使える
- 自鯖にインスコも可能だけどSaaSとしても利用可
- Trello的なissue管理ボードやWikiもあるし、CI連携とかも強い
これとSlackがあれば小規模チーム開発なら何ら問題なさそう。強いて言うならちと読み込みが重め。
GitLabとSlackの連携
GitLabの設定→Integrations→最下部の「Slack notifications」を表示。
あとは普通にSlack側でIncoming Webhookを作ってURL指定してあげればOK。
rbenvで最新版のrubyを入れる
事前に brew upgrade ruby-build
しないと、 rbenv install --list
で表示される「インストール可能なバージョンのリスト」が更新されていない場合があるので注意。大体こんな流れ
brew upgrade ruby-build rbenv install 2.5.1 rbenv rehash rbenv global 2.5.1 gem install bundler
既存のDBからschema.rbを自動生成する
database.yml
を編集した上で rails db:schema:dump
を実行。簡単すぎて腰が抜ける。
Gemfileに書いた gem 'mysql2'
が通らなかった
Xcodeのコマンドラインツールが入ってないと動かないことがあるみたい。
入れたら動いた。ただ普段Xcode使わないので容量圧迫したくない気持ちはある。
xcode-select --install
jQueryはrailsの標準装備では無くなった
5系辺りからレギュラー外されたみたい。まあわかる。
gem 'jquery-rails'
した上で、 app/assets/javascripts/application.js
に下記を追加
コメントみたいで紛らわしいけどこれで合ってます
//= require jquery
画面遷移時にJSが動かない
この辺。
私のケースではjQueryだったので
$(document).on('turbolinks:load', function() { yaritai_koto(); }
redirect_to に続けて書くflashが動かない
redirect_to '/login', flash: { error: '何もしてないのに人生が壊れた' }
こう書くとflash部分がURLのGETパラメータに乗ったりしてブチギレ
↓みたいな類似ケースもありつつ、 flash: { notice: 'hoge' }
を単に notice: 'hoge'
の形にすることで解決していた。
Railsのflashでは notice
と alert
の2つのラベルが一般的に使われているようですが、今回はシステム移植案件で、移植元は notice
error
success
の3つを使い分けていたので、出来ればそのまま移植したいというモチベ。
しかしどうしても解消できないので諦めて2段階に分けて書いた(これなら動く)。
flash[:error] = '間違ってるのは俺じゃなくて社会' redirect_to '/login'
redirect_to
のドキュメント 見ても日本語でおk
実装見てもよく分からず、匙は投げられた
controllerに書いたメソッドをviewで使う
コントローラに下記を追加
helper_method: view_de_use_method
ARで対応するレコードの存在を前提とするコードを書いているとnil
で落ちる
User.find(1).friends.first.name
とか書くと友達が居ないユーザで落ちがち
nil
になる可能性のある箇所から &.
を書くことで回避できる。これでぼっちも安心