Help us understand the problem. What is going on with this article?

ActiveRecordでstrict_modeを無効にする

More than 5 years have passed since last update.

Rails 4.0からActiveRecordにstrict_modeが導入され、デフォルトでは接続時にsql_mode = STRICT_ALL_TABLESをセットするようになりました。

これは、既に運用されているDBに接続する等なんらかの理由でMySQL側で適切な設定が行えていない場合有用な動作ですが、そうでない場合、サーバー側の設定を鑑みずにクライアント側が設定を上書きするべきではないでしょう。

そのため、database.ymlでstrict: falseと設定することでこの動作を無効にすることができましたが、Rails 4.2.0ではこの動作が変更され、strict: falseのときはstrictでない状態にするためsql_mode = ''をセットするようになりました。

MySQLのデフォルトのsql_modeに依存して既に通っていたはずのテストが通らなかったりすることがあり、テストを通すためにstrict: falseのときはstrictでない状態にする必要があったようです。

これによってstrict: falsesql_mode = ''をセットしてしまうので、Rails 4.2.0では別のワークアラウンドが必要です。

現状、database.ymlでsql_mode: :defaultを設定するのがもっとも副作用がない方法だと思われます。

production:
  adapter: mysql2
  database: foo_prod
  user: foo
  variables:
    sql_mode: :default

Rails <= 4.0.5, 4.1.0, 4.1.1にはこの修正がバックポートされていないので:sql_mode: :defaultとvariablesのキーをシンボルにしないとstrictの設定が後勝ちします。

SEE ALSO

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away