rails 4.1 から 4.2 へ移行したので、その対応とかつまずいたところをまとめてみました。
以下、引用しているのはリリースノートからです。
Active Record
代入時に、そのカラムの型に cast されるようになったようです。
cast されないことを期待した validation とかがあったので対応が必要でした。
例
例えば以下のようなテーブルを定義したとして、
create_table :numbers do |t|
t.decimal "rate", precision: 3, scale: 1, default: 1.0, null: false
t.timestamps null: false
end
Rails 4.1.15
> Number.new(rate: 1.23).rate.to_f
=> 1.23
Rails 4.2.6
> Number.new(rate: 1.23).rate.to_f
=> 1.2
Action Pack
結合テストの中でprocessヘルパーを呼び出すとき、パスの冒頭にスラッシュ ('/') が必要になりました。以前は省略することができましたが、これは内部実装による副作用であり、意図的な機能ではありません。
例:test "list all posts" do get "/posts" assert_response :success end
一部で冒頭スラッシュなしのコードがあったので、その部分の対応をしました。
rubygems
- state_machine という gem が対応していなかったので state_machines-activerecord を使うようにしました。 (参考) https://www.hsbt.org/diary/20150331.html#p01
非互換の対応
respond_withと、これに対応するクラスレベルのrespond_toはresponders gemに移動されました。この機能を使用したい場合は、Gemfileにgem 'responders', '~> 2.0'を追記してください。
表記の通り responders gem を使うようにしました。
非推奨の対応
.findや.exists?にActive Recordオブジェクトを渡すことは非推奨になりました。最初にオブジェクトのidを呼び出すべきです。
production環境でconfig.log_levelを未設定のままにすることが非推奨になりました。
deliver やdeliver!が非推奨になりました。今後はdeliver_nowやdeliver_now!を使用してください。
- config.serve_static_assets を config.serve_static_files に変更