it-swarm-ja.tech

モデルに特定の列/属性があるかどうかを確認する方法は?

ハッシュをループし、各キーがモデルテーブルに存在するかどうかを確認する必要があるメソッドがあります。そうでない場合、キー/値が削除されます。

例えば

number_hash = { :one => "one", :two => "two" }

また、Numberテーブルには:one列のみがあるため、:twoは削除されます。

モデルに属性があるかどうかを確認するにはどうすればよいですか?

116
dMix

クラスの場合

_Class.column_names.include? attr_name_を使用します。ここで_attr_name_は属性の文字列名です。

この場合:_Number.column_names.include? 'one'_

インスタンスの場合

record.has_attribute?(:attr_name)またはrecord.has_attribute?('attr_name')(Rails 3.2+)または_record.attributes.has_key? attr_name_を使用します。

この場合:number.has_attribute?(:one)またはnumber.has_attribute?('one')または_number.attributes.has_key? 'one'_

192
Andy Stewart

エイリアスも確認する必要がある場合は、Number.method_defined? attr_name または number.class.method_defined? attr_name

エイリアスフィールドを持つMongoidオブジェクトに対してこれを行う必要がありました。

12
Nick

インスタンスオブジェクトでは、defined? instance.attribute または instance.respond_to? :attribute
これらは、モデル属性またはメソッドもチェックするためのより一般的なソリューションです。

8
Alter Lagos