ActiveModel::Attributes をincludeして、attributesメソッドを使う場合の注意点


概要

ActiveModel::Attributes をincludeして、attributesメソッドを使う場合の注意点を記載します。


注意点

class UserForm

include ActiveModel::Model
include ActiveModel::Attributes

attr_accessor :name
attribute :registerd_at, :datetime, default: false
end

上記の UserForm クラスがあった場合に、attributesメソッドを使用すると attribute で指定したアトリビュートしか取得出来ません。実際にやってみます。

% user_form = UserForm.new(name: :sakuragawa, registerd_at: '2018-08-05')

% user_form.attributes => {"registerd_at"=>2018-08-05 00:00:00 UTC}


対応方法

全てのアトリビュートをattributeで指定する方法が考えられます。差分は以下のとおりです。

   include ActiveModel::Model

include ActiveModel::Attributes

- attr_accessor :name
+ attribute :name, :string
attribute :registerd_at, :datetime, default: false
end


環境


  • Rails 5.2.0