0

私のコントローラでは、属性を許可する* _paramsがあります。何があっても、物事が確実に変わったとしても、.changedは常に空白です。変更された属性を検出する新しいRails 5の方法はありますか?mongoid .changedを持つRails 5は、更新時に常に空です。

# case_params is the basic rails controller permission method 
if @case.update(case_params) 
     puts @case.changed.count # this is is always 0 
     ... 

私が間違っていることは誰でも見ることができますか?私は何が変更されたのかを知る必要があるので、スレッド内で他の作業を選択的に行うことはできますが、変更された属性に対してのみ行うことができます。

ありがとうございました。

+0

モンゴイドは['ActiveModel :: Dirty']の代わりに[' Mongoid :: Changeable'](https://github.com/mongodb/mongoid/blob/7847b38103de798e567fec24d998df8e42971158/lib/mongoid/changeable.rb)を使用します://api.rubyonrails.org/classes/ActiveModel/Dirty.html)。したがって、動作はレールに強く結合されず、ActiveRecordと異なる場合があります。 – max

答えて

2

@cases.previous_changesを使用すると、ドキュメントのすべての変更をハッシュ形式で表すことができます。ハッシュもupdated_at属性のコンサイト。上記のカウントに-1を指定すると、変更されたすべての属性がupdated_atを除いて数えられます。

あなたは私たちが減算する-1 updated_atの属性変更を除去するために必要な@cases.previous_changes.keys.count - 1

でカウントを取得することができます。

アソシエーションの変更を検出するには、children_changed?を使用してみてください。

+0

これはembeds_manyオブジェクトでは機能しないようですが、埋め込みオブジェクトを変更して変更作業を見ることができますが、常にprevious_changesと変更は空ですが、常に0です。 – user1130176

+1

編集した回答を確認してください。 –

関連する問題