28924


Railsで`Company`モデルがあり、`has_many` `QuarterValue`という関係を持っています。

そして`Company`のインスタンスメゾットで`QuarterValue`の特定の値を一括で変更するという処理をしているのですが、何故か変更がDBに反映されません。

変更後に

[code]

    company.quarter_values.map(&:persisted?)
    
[/code]

を試すと全て`true`が返ってきます。  
また`company.quarter_values.last`で該当カラムを確認すると値が変更されているのですが

[code]

    quarter_value = QuarterValue.find(company.quarter_values.last.id)
    
[/code]

で確認すると該当カラムの値は変更されていません。

該当のカラムの型は`decimal`で代入しようとしてる値は`BigDecimal`です。

[code]

    quarter_value.update(column_name: value)
    
[/code]

で値を更新すると問題なく行われます。

一体何が問題なのでしょうか？  
何か基本的な事を見落としてる気がするのですが、  
どう調べれば良いかもわからない状態で困っています。

Rails: 4.2.1 でDBは `Postgresql` を使っています。


CC BY-SA 3.0
2016-09-15T18:36:36.270
28911
2016-09-16T07:06:45.017
3271
question
ruby-on-rails
Railsでpersisted? が true のオブジェクトの値が保存されていない


@naopontan さんのアドバイスで`reload`を使った所、必要ないインスタンスが生成されていたのでそれを止めて、それから

[code]

    quarter_values.find_each { |q| q.update(foo: nil) }
    
[/code]

という処理をしてる部分があったので、

[code]

    quarter_values.update_all(foo: nil)
    
[/code]

に変えた所、期待通りの処理になりました。

なお

[code]

    quarter_values.each{|q| q.update(foo: nil)}
    
[/code]

でも問題は発生しませんでした。


CC BY-SA 3.0
2016-09-16T07:06:45.017
28924
2016-09-16T07:06:45.017
3271
28911
answer