2

私のアプリケーションでは、イベント システムをセットアップして、ユーザーに発生したすべてのログを表示しました。汚い物を使っています。

これが私がこれまでにしたことです

def log_details_change(owner)
  Event.log(owner.condo, :updated_owner_details, [owner.changes.slice('first_name', 'last_name', 'email', 'start_date', 'phone_number')])
end

owner.changesメソッドがそのようなハッシュを提供することがわかりました

{ 'title' => ["Title", "New Title"] }

たとえば、ユーザーの電話番号を削除すると、返されるハッシュは次のようにowner.changesなります。

{ 'phone_number' => ["514554541", ""] }

基本的に、変更された値は空です (または空白、または nil - よくわかりません)。

変更された値が空かどうかを確認するために値にアクセスするにはどうすればよいですか? '' 文字列の代わりに文字列を表示したいと思います。

以下のものを含め、さまざまなことを試しました

owner.changes.slice('first_name', 'last_name', 'email', 'start_date', 'phone_number').each_value { |v,k| v.blank? or v.nil? or v.empty? ? 'nope' : v }

しかし、それは私に何も得ません。あなたが私に与えることができる助けをありがとう!

4

2 に答える 2

0

それを行うには多くの方法がありますが、いくつかの汚い方法があります。

配列として値を返します:

owner.changes.map{|column_name,column_change| column_change.last.blank? }
=> [true, false]

変更された列としてのキーと空白の true/false としての値を持つハッシュを返します。

owner.changes.inject({}){|result,col| result[col.first] = col.last.last.blank?; result}
=> {name: true, surname: false}
于 2013-05-22T20:54:55.537 に答える