7

mysql2アダプターとActiveRecordを使用してMySQLデータベースのさまざまなフィールドから空白とキャリッジリターンを削除しようとしています:
Ruby 1.9.3p194
ActiveRecord 3.2.8
MySQL 5.5.28

foo = People.find(1)
foo.name => "\rJohn Jones"
foo.name.lstrip! => "John Jones"
foo.name => "John Jones"
foo.changes => {} #no changes detected to foo.name???
foo.save => true # but does nothing to database.

私が行った場合:

foo.name = "John Jones"
foo.save => true
People.find(1).name => "John Jones" # this works and saves to database

私はこれをあちこち検索しました...何か提案はありますか?

4

1 に答える 1

7

モデル属性にインプレース変更を行うと、割り当ては発生せず、モデルは変更が加えられたことを認識しません。これを行う正しい方法は、次を再割り当てすることです。

foo.name = foo.name.lstrip

これによりメソッドがトリガーname=され、ダーティトラッキングが実行されます。

于 2012-10-12T20:12:03.437 に答える