accepts_nested_attributes_forしたときのchanged?に気をつけよう

TL; DR

  • rails 5.0.2
  • accepts_nested_attributes_for で子モデルを変更しても、親モデルの changed?false を返すよ
  • なので、 changed? を見て何らかの処理をフックするようなコードを書くときは気をつけよう
  • relations_changed? メソッドを生やしておくのが良いと思うよ
続きを読む

rails asset pipeline JSが、developmentでは動いてproductionでは動かないということはあり得る

滅多にないとは思うが、実際そういうことが昨日起きて、しばらく悩んだのでメモしておく。
「コレが原因でこういう現象が起こるケースがありました」という報告なので、そのつもりで読んで欲しい。

続きを読む

accepts_nested_attributes_forしたときのi18n

Rails 5.0.2

Railsi18n書くときに、ちょっと複雑になるとYAMLをどう書けばいいかわからなくなる問題。

たぶんソース見るのが一番良い。こことかね。

github.com

のだけど、accepts_nested_attributes_forしたときのi18nの書き方だけまとめておく。

続きを読む

ridgepoleで想定外のdiffが出るときに試したい1つのこと

SymbolじゃなくてStringを使う

以下詳細。

続きを読む

DeviseでSign upはさせないけど、ユーザ自身にパスワード変更はさせたい

今日もDevise

READMEにも書いてある通り、Deviseは機能が複数のmoduleに分かれていて、有効にしたいmoduleを選んでいくわけだが、今回は Registerable について。

Registerable を有効にすると、アカウント未所持ユーザが自ら、自分のメールアドレスを入力してアカウント作成をすることができるようになる。いわゆる「サインアップ」という機能を提供してくれる。それと同時に、アカウント保持者向けに、自身のアカウントの削除や、パスワード変更の機能もある。

という便利なmoduleであるところまでは良いのだが、問題は、「サインアップや自身の削除は機能として提供したくないが、自身のパスワード変更機能は提供したい」という場合だ。この場合は、

  1. Registerable moduleのうち不要な機能を潰す
  2. Registerable moduleは使わずに、必要な機能のみを自前実装する

の2択を迫られる。今回は1の方法を取ることにする。

続きを読む

Gemfile.lockのマージミスってハマった話

結論を言えば、マージ気をつけましょう、以上って感じなのだけど、少し実験する。

  • ruby 2.4.1
  • gem 2.6.11
  • bundler 1.4.16
続きを読む

TerraformでSPFレコードを作る

SPFレコードとは、DNSサーバにTXTレコードとして登録する特殊なフォーマットのこと。メール送信者の認証に用いる。

ご存知の通り、メールをサーバから送信する際、Fromヘッダには自由にメールアドレスを設定することができる(他者のドメインであっても)。これに対し、受信者側が「本当にそのFromに設定されたアドレスのドメインは送信者の持ち物か?」を確認する手段の1つがSPFレコード。例えばGMailサーバはSPFをパスしないとほぼ確実に迷惑メール扱いしてくる。したがって、メールを送信するWebアプリケーションを構築する場合SPFレコードを正しく設定するのはほぼ必須となる。

SPFレコードについてより詳しく知りたい方はこちらを参照して欲しい。

sendgrid.kke.co.jp

で、今回は、Route53上にTerraformからSPFレコードを設定しようという話。

続きを読む