$ git show branch_name:/path/to/file
すると別のブランチのファイルを標準出力にだすことができる(知らなかった).
$ git show branch_name:/path/to/file | vim -
するとVimで開けて便利.lessとかに出すのも良さそう.branch_name
はコミットのハッシュでもOK.
消したファイルとかいちいちGitHubに見に行かなくて済むようになった.
$ git show branch_name:/path/to/file
すると別のブランチのファイルを標準出力にだすことができる(知らなかった).
$ git show branch_name:/path/to/file | vim -
するとVimで開けて便利.lessとかに出すのも良さそう.branch_name
はコミットのハッシュでもOK.
消したファイルとかいちいちGitHubに見に行かなくて済むようになった.
卒論でUMLのシーケンス図をTeXに貼る必要が生まれた.Illustratorとかでちまちま描いても良いのだけど,面倒なのでテキストでなんとかしたい.
便利なツールあって,これ使うとテキストでシーケンス図を描くことができる.
SVGでダウンロードできるのだけど,このままだと使い勝手が悪いのでpdfに変換する.pdfにしてしまえばあとはpngみたいにxbb作ったりするだけでTeXに貼れる.
pdfに変換するにはInkscapeを使えば良い.Macならhomebrew caskで入れられる.最近cask新しくなったらしくてよくわからないけど,古いやつならbrew cask install inkscape
とかで入って便利.
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -f /path/to/source.svg -A /path/to/dst.pdf -w 1000
このコマンドでsvgをpdfに変換できる.アプリケーションのパスは適宜変更のこと.svgとpdfのパスは絶対パスにしないとうまくいかないかもしれない.$HOME/Downloads/diagram.svg
みたいな感じで指定するとよさそう.
シーケンス図に日本語入ってると中華フォントになって困る.テキストエディタでダウンロードしたsvgを開いてfont-familyのAndale Mono
ってところをHiragino Kaku Gothic ProN W3
とかに変えてからInkscapeで変換するとうまくいく.
ヒラギノ入ってない環境なら雑にメイリオとか指定するとなんとかなりそう.
これでちまちま図を描かなくて良くなって最高.
Rails(ActiveRecord)にはSTI(単一継承テーブル)があって,テーブルは1つだけどtype
というカラムでモデルを出し分けることができる.例えば,アンケートの項目には単一/複数選択があり,これらを保存する先のテーブルは1つにまとめたいがプログラム上では別のモデルとして扱いたい場合にSTIを使うと良い.
継承したモデルと別のテーブルとの間にリレーションを作成するとkeyが見つからないと怒られることがある.
has_many
にforeign_key
を指定すれば良い.以下のように書ける.はず.
class Answer < ActiveRecord::Base has_many :item_answer_relation has_many :checks, through: :item_answer_relation has_many :radios, through: :item_answer_relation end class Item < ActiveRecord::Base end class Check < Item has_many :item_answer_relation, foreign_key: 'item_id' has_many :answers, through: :item_answer_relation end class Radio < Item has_many :item_answer_relation, foreign_key: 'item_id' has_many :answers, through: :item_answer_relation end
参考: - ruby on rails - Single-table inheritance with relationships? - Stack Overflow
サンプルコード書いてて若干自信なくなってきたので間違ってたら教えてください
Railsで
$ rails g model Hoge fuga:references $ rake db:migrate $ rm -rf db/migrate
みたいな感じでモデル新規作成時だけ一旦マイグレーションファイル作ってからRidgepoleのSchemafileにdumpして… みたいな運用してたら詰まった.
ActiveRecordのreferencesはadd_foreign_key "hoge", "fugas"
みたいな感じで名前を設定しないので,このままdumpするとSchemafileにも名前なしの外部キーが出力される.これをDBにapplyしようとすると
Apply `db/schemas/Schemafile` [ERROR] Foreign key name in `hoge` is undefined rake aborted! Command failed with status (1): [bundle exec ridgepole -Edevelopment -c con...] ...
みたいな感じでエラーを吐く.修正するには
db/schema.rb
のfkに名前を設定Schemafile
のfkに名前を設定$ rake db:reset
とか実行しておくみたいなことすればよさそう.
ちゃんと名前を設定しようという話でした.
外部キー詳しくないまま使ってるのだけど,Ridgepoleで名前の設定を強制させる理由ってなんだろう.Rails側が無名で出力できるんだからわざわざraiseすることなくてwarnとかでとどめておけば良いのに.
application/json
を受け取りたい場合
def params @params ||= JSON.parse(request.body.read, {:symbolize_names => true}) end
書いとくとapplication/x-www-form-urlencoded
の場合と同じ感じでparamsを受け取ることができる.APIつくるときに便利.
skip_before_action :verify_authenticity_token
ないとCSRFトークンのチェックでコケると思う.これ書くのにAPIを統括するコントローラとか挟むのが定石だと思うので,そのあたりに書くとよさそう.
参考
もっといいやり方あったら教えてください